2

文字列を文字列の配列にコピーしようとしていますが、うまくいきません。メモリ割り当てによる問題であることはわかっていますが、STRING_LENGTH が定数であるため、どのように機能させることができるかわかりません。

#define NUMBER_OF_STRINGS 3
#define STRING_LENGTH 255
char message_ecran[NUMBER_OF_STRINGS][STRING_LENGTH];

int i;
char texte3[] = "CVC";
char texte7[] = "iiiiiiiii";

for (i=0;i<=NUMBER_OF_STRINGS;i++)
{
    strcpy(message_ecran[i], texte7);
}
strcpy(message_ecran[0], texte3);

コードの後の message_ecran の値:

"CVC"
null
"iiiiiiiii"

期待値

"CVC"    
"iiiiiiiii"
"iiiiiiiii"
4

3 に答える 3

4

message_ecran1 つの問題は、次のループの最後を過ぎて実行することです。

for (i=0;i<=NUMBER_OF_STRINGS;i++)

は範囲外であるためmessage_ecran[NUMBER_OF_STRINGS]、入ろうとstrcpy()すると未定義の動作が発生します。

編集あなたの編集に関しては、問題を再現できません。最新のコードに次を追加すると:

for (i = 0; i < NUMBER_OF_STRINGS; i++) {
  printf("%d:[%s]\n", i, message_ecran[i]);
}

それは印刷されます

0:[CVC]
1:[iiiiiiiii]
2:[iiiiiiiii]
于 2013-03-11T10:36:53.427 に答える
2

このコードは、次の行で配列の境界を超えてアクセスするため、未定義の動作をします。

for (i=0;i<=NUMBER_OF_STRINGS;i++)

配列インデックスは 0 から始まる0ためN - 1Nは配列内の要素数です。これは、有効な配列インデックスmessage_ecran0and1のみであることを意味しますが、ループ内2のインデックスとして使用されます。forへの変更:

for (i=0;i<NUMBER_OF_STRINGS;i++)
于 2013-03-11T10:37:29.750 に答える
0

さらに、1からループを開始できます。

for (i = 1; i < NUMBER_OF_STRINGS; i++)

後で0番目の場所に「texte3」を割り当てるためです。

于 2013-03-11T11:38:09.207 に答える