2016-09-15 5 views
0

私は、コマンドライン引数&配列ポインタを使用してC言語でプログラムを記述しようとしています...発行し、コマンドライン引数を経由して渡された値を印刷しながら

私の目標は、我々は、コマンドラインを介して渡している値を見つけることです引数。

セパレーター

として、持つことではstrtokを使用してこれらの値をSeperatingが、私は間違いを犯して作ってるんだどこiteratios.iは理解していない2後にセグメンテーションフォールトを取得しています。

誰かがこの問題を解決するのに役立つでしょうか?

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 HI、BYE、ハロー、車

STR [0] = HI

STR [1] = BYE

セグメンテーション障害(コアダンプ)

+1

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

答えて

1

トークン化された文字列を格納するのに十分なメモリを割り当てていません。str

変更ライン

char *str[ARRAY_SIZE] = {}; 

とすべてのトークンを保持するのに十分大きな値であることをARRAY_SIZEを定義する

char *str[] = {}; 

1

問題は、変数strにメモリが割り当てられていないことです。あなたはそれに一連のchar *ポインタを格納しようとしますが、それらを格納するメモリはありません。あなたは10個の以上のポインタを格納しようとしないことを確認する必要があり、whileループで
char *str[10];

クイックフィックスは、特定の数のスロットを定義することです。

関連する問題