2017-01-23 4 views
0
#include <stdio.h> 
#include <string.h> 

main() { 
    int i = 0, j = 0; 
    char ch[] = { "chicken is good" }; 
    char str[100]; 
    while ((str[i++] = ch[j++]) != '\0') { 
     if (i == strlen(str)) 
      break; 
    } 
    printf("%s", str); 
} 

私はwhileループを使用してstrchから文字列"chicken is good"をコピーしたいです。しかし、strを印刷すると、出力は"chi"と表示されます。それは文字列の一部だけを出力します。私の状態は間違っていますか?このCプログラムの出力を説明できますか?

私のIDEとしてDev C++を使用しています。私のコンパイラのバージョンはgcc 4.9.2です。また、私はプログラミングの初心者です。それが初期化されていない値を読んでいるので

+4

(I == strlen関数(文字列))場合 '削除 break' – BLUEPIXY

+0

私はそれを@BLUEPIXY – kryptokinght

答えて

2

strlen(str)は、未定義の動作をしています。

+0

私はそれを得た、返信に感謝 – kryptokinght

3

声明if (i == strlen(str)) break;は無用であるとstrがまだ終了してnullでないので、未定義の動作をしています。あなたのプログラムが他の問題を持っていることを

注:

  • あなたはintとしてmain関数の戻り値を指定する必要があります。古い構文を使用しています。
  • あなたは別のインデックス変数i送信元と送信先の配列のためのjは必要ありません。彼らは常に同じ価値を持っています。
  • あなたのメッセージの最後に改行を印刷する必要があります。
  • 良いスタイルのために、あなたはmain()の終わりに0を返す必要があります。ここで

が簡単なバージョンです:

#include <stdio.h> 

int main(void) { 
    int i; 
    char ch[] = "chicken is good"; 
    char str[100]; 

    for (i = 0; (str[i] = ch[i]) != '\0'; i++) { 
     continue; 
    } 
    printf("%s\n", str); 
    return 0; 
} 
+0

おかげです精巧な答えとすべての私の欠陥を示す@chqrlie – kryptokinght

関連する問題