2016-09-15 2 views
0

Ich versuche, ein Programm in C unter Verwendung von Befehlszeilenargumente & Array Zeiger zu schreiben ...Problem beim Drucken die über Kommandozeilenargumente übergeben Werte

Mein Ziel ist es, die Werte zu finden, die wir über die Kommandozeile sind vorbei Streit.

seperating diese Werte strtok mit, indem er als seperator

Aber ich bin immer Segmentation fault nach 2 iteratios.i nicht verstehen, wo ich mache Fehler.

Könnte jemand mir helfen, dieses Problem loszuwerden?

int main(int argc,char *argv[]) 
{ 
     char *str[] = {}; 
     char *string = argv[1]; 
     const char s[2] = ","; 
     char *token = ""; 

     int i = 0,j = 0,k = 0,l = 0,m = 0; 

     token = strtok(string, s); 
     while(token != NULL) 
     { 
       str[i] = token; 
       printf("str[%d]= %s\n",i,str[i]); 
       i++; 
       token = strtok(NULL, s); 
     } 
     return 0; 
} 

bash-3.2 ./code $ hallo, tschüss, hallo, Auto

str [0] = hallo

str [1] = bye

Segmentation fault (core dumped)

+1

'char * str [] = {};' -> 'Zeichen * str [strlen (argv [1])/2 + 1];' – BLUEPIXY

Antwort

1

Sie haben in str nicht genügend Speicher zum Speichern der Token-Strings zugewiesen.

die Leitungswechsel

char *str[] = {}; 

zu

char *str[ARRAY_SIZE] = {}; 

und definieren ARRAY_SIZE Wert groß genug sein, um alle Tokens zu halten.

1

Das Problem ist, dass Variable Str wurde keinen Speicher zugeordnet. Sie versuchen, eine Reihe von char * Zeigern darin zu speichern, aber es gibt keinen Speicher, wo sie gespeichert werden.

Eine schnelle Lösung wäre, eine bestimmte Anzahl von Slots zu definieren:
char *str[10];

In der while-Schleife sollten Sie überprüfen, dass Sie nicht versuchen, mehr als 10 Zeiger zu speichern.

Verwandte Themen