2016-09-05 6 views
-2
int main(void) 
{ 
    const char* line = "This isn't working"; 
    char* str[10]; 
    int index = 0; 

    for(int i = 0; i < 10; i++) 
    { 

     int j = 0; 
     str[i] = malloc(10 * sizeof(char)); 
     while(line[index] != ' ') 
     { 

      str[i][j] = line[index]; 
      j++; 
      index++; 
     } 
     index++; 
     if(index == strlen(line) - 1) 
      break; 


    } 

    for(int i = 0; i < 10; i++) 
    { 

     printf("%s\n", str[i]); 
    } 



} 

変数 "line"から単語を格納する文字列配列を作成しようとしています。しかし、私が書いたコードは "セグメンテーションフォールト"を与えています文字列配列の実装がセグメンテーションフォールトを返す

+4

あなたがされています

はそれがwhileループ条件を変更する修正するには。 – EOF

+0

...また、文字の追加が確実に確保された未確認の割り当てられたスペースをオーバーランしないようにループを制限していません。 – WhozCraig

答えて

1

"This isn't working"while(line[index] != ' ')のサンプルストリングは永遠に動作します。長さチェックは、このループの後に1回だけ行われます。そのため、未定義の動作が発生しています。あなたの問題の主な原因になることがあります。このトピックに関する良い記事"Undefined behavior can result in time travel"あなたの文字列をNULLで終端しない

int strLength = strlen(line); 
while (index < strLength && line[index] != ' ') 
{ 
    // Do the job here 
} 
1

Cの文字列はNULで終わる必要があります。内部ループの後、str[i][j] = '\0'と言ってこの問題を修正することができます。

コードには他に少なくとも1つの問題があります。lineの最後の単語に到達すると、内部ループを終了するスペースがないため、内部ループは実行され続け、無関係に読み込まれますあなたがNever Never Landの宇宙のキャラクターに出くわすまでは、

+0

nullを[NUL](https://en.wikipedia.org/wiki/Null_character)に変更しました。 –

関連する問題