2017-02-02 4 views
1

エラーが発生する場合は、Segmentation faultがif条件になります。 strcpyコマンドを使用していなかったからだと思ったが、同じエラーが出る。セグメンテーションフォールト:11条件を使用している場合

機器には、毎回<文字未満の数の文字列が割り当てられます。 私は行方不明ですか?

char *aircraft, *aircraft_array[60000], equipment[100]; 
int size=0; 


aircraft=strtok(equipment," "); 


while (aircraft!=NULL){ 

      aircraft_array[size]=aircraft; 
      size++; 

      if (strcmp(aircraft_array[size],aircraft)==0){ 
       printf("%s\n",aircraft); 
      } 


      aircraft=strtok(NULL," "); 
     } 
+4

'if(strcmp(aircraft_array [size]、aircraft)== 0){'は前のステートメントでサイズを増やしました。 'aircraft_array [size]'に初期化されていないポインタが含まれるようになりました – joop

答えて

4

問題は、可変サイズではなく、文の

 size++; 
     ^^^^^^^ 
     if (strcmp(aircraft_array[size],aircraft)==0){ 
            ^^^^^ 

所if文の後にインクリメントさせるのif文の前にインクリメントされたということです。

1

問題は、strtokからの戻り値が永続的ではなく、ポインタがstrtok(NULL、 "")を呼び出すたびに変更される内部静的バッファを参照していることです。

トークンのスペースを割り当てて、そのスペースに文字列をコピーする必要があります。

aircraft=strtok(equipment," "); 

while (aircraft!=NULL) 
{ 
    aircraft_array[size]=malloc(strlen(aircraft)+1); 
    strcpy(aircraft_array[size], aircraft); 
    size++; 
関連する問題