2017-05-29 2 views
0
geben

Also das ist mein Code:Funktion strlen() "Segmentation Fault" Fehler

int c; 
char b[c]; 

scanf("%s",b); 
c=strlen(b); 

printf("\n"); 
printf("%s\n",b); 

Wenn ich es ausführen, es hält mich geben einen "Segmentation Fault (core dumped)" Fehler. Ich möchte die String-Größe nicht vorher definieren. Ich möchte, dass das Programm es bestimmt, nachdem ich die Zeichenfolge fertig geschrieben habe.

Alle Hilfe wird sehr geschätzt.

Antwort

0

Diese

int c; 
char b[c]; 

gibt Ihnen nicht definiertes Verhalten, wie c nicht initialisiert wird, aber wird dann als die Array-Größe für b verwendet. Undefiniertes Verhalten bedeutet, dass alles danach passieren kann, einschließlich der Ausführung von "OK" für eine Weile und späterem "Core Dumping".

Es klingt wie, was Sie wollen, ist die String-Länge von der Eingabe zu bestimmen, aber Sie können dies nicht mit einem Array in C, da Array-Größen konstant sind, bestimmt, wenn das Array deklariert ist. Stattdessen müssen Sie einen dynamisch zugewiesenen Puffer verwenden, den Sie beim Lesen Ihrer Zeichenfolge entsprechend anpassen. Wenn Sie POSIX verwenden, können Sie die Bibliothek stdio tun lassen, dass Sie mit einem m Modifikator auf Scanf Anruf:

char *b; 
if (scanf("%ms", &b) > 0) { 
    printf("%s\n", b); 
    free(b); } 

Wenn Sie nicht POSIX C verwenden, können Sie stattdessen müssen zuerst einen größeren zuteilen als möglicherweise benötigt Puffer (und optional später Größe ändern) oder nicht scanf überhaupt verwenden.

+0

Danke für die schnelle Antwort. Mein Programm soll: Aufforderung, eine Zeichenfolge mit so vielen Zeichen wie ich möchte schreiben, dann bestimmen Sie die Größe dieser Zeichenfolge und aktualisiert so "b" mit seiner tatsächlichen Größe. Ich möchte die Größe nicht vorher deklarieren oder irgendein Limit festlegen. – Britovski