2016-04-20 3 views
-1

Ich bin ein Anfänger versuchen, Anruf strings zu lernen. Also hier ist ein Programm, das ich geschrieben habe und ich versuche ein Programm zu erreichen, das alle Zeichen eines Namens pro Zeile anzeigt. Dieses Programm kompiliert erfolgreich, aber nach der Eingabe des Namens stürzt das Programm ab. Kann mir jemand sagen, was ich falsch mache? Vielen Dank !Probleme mit Zeichenfolgen, Absturz des Programms

#include <stdio.h> 
#include <string.h> 

int main(void) 
{  
    char s; 

    printf("Enter name\n"); 
    scanf("%c", s); 

    int i; 
    for(i = 0; i < strlen(s); i++); 
    printf("%c, s[i]"); 

    return 0; 
} 
+1

'scanf ("% c ", s);' -> 'scanf ("% c ", &s);' –

+0

Warten ... stop ... wirklich? Ein _string_ in einem 'char'? –

Antwort

0

Es gibt mehrere Probleme:

Sie wollen dies:

#include <stdio.h> 
#include <string.h> 

int main(void) 
{  
    char s[100];  // array of 100 chars 

    printf("Enter name\n"); 
    scanf("%s", s); // read name from user into s array 

    int i; 
    for (i = 0; i < strlen(s); i++) 
    printf("%c", s[i]);  

    return 0; 
} 

Erweiterte Thema:

Diese Zeile:

for (i = 0; i < strlen(s); i++) 

obwohl korrekt ist, ist ineffizient.

Code Nach ist besser:

int len = strlen(s); 

for (i = 0; i < len; i++) 

Herauszufinden, warum als eine Übung für den Leser überlassen.

+0

Vielen Dank ! können Sie mir sagen, was genau hier int len ​​= strlen (s) geschieht; for (i = 0; i theweeknd

+0

@theweeknd Hinweis: wenn 's' eine Zeichenfolge der Länge enthält 10000, wie oft wird "strlen" mit deinem Code aufgerufen? Und wie oft wird es mit meinem Code aufgerufen? –

0

Sie haben mehrere Probleme in Ihrem Programm. Zuerst haben Sie nur Speicher für eine einzelne char reserviert, aber Sie möchten einen Namen darin speichern (der aus mehreren chars besteht).

Darüber hinaus haben Sie mehrere Syntaxfehler wie ; nach der for-Schleife und eine falsche " in der printf Aufruf.

Wenn ich verstehe es richtig suchen Sie so etwas wie diese:

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char s[200]; 

    printf("Enter name\n"); 
    scanf("%s", &s); 

    int i; 
    for (i = 0; i < strlen(s); i++) 
    printf("%c\n", s[i]); 

    return 0; 
} 
0

Ein Weg, dies zu tun, mit Erklärungen in den Kommentaren:

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char s[] = {"\0"}; //s should be a char array type, it needs explicit size or initialization 
    printf("Enter name\n"); 
    scanf("%s", s); //format specifier must match data type 
    int len = strlen(s); 
    for(int i = 0; i < len; i++) 
     printf("%c\n", s[i]);//format specifier must match data type 
    return 0; 
} 

Hope this helfen kann.

+0

Danke - hoffe das sieht besser aus – user3078414