私は教科書を学習中です。c。練習の1つは、本からのコードを文字通りコピーしてscanfを使って説明することです。何回何を何回印刷するべきかについてのユーザ入力を得る。 forループを使用して文字列を出力すると、文字列の最後の文字が混乱しているように見えます。以下を参照してくださいと助けていただければ幸いです。これまでのところ、問題の原因になっているかどうかを確認するために '\ n'を削除しようとしました。ループの前に文字列を表示して、文字列との間にエラーがあるかどうかを確認しましたが、ループの外側で正常に動作するようです。以下のコード:forループは正しく印刷されませんが、印刷は正常に終了します。
#include <stdio.h>
#include <string.h>
int main(void)
{
char message[10];
int count, i;
strcpy(message, "Hello, World!");
printf("Repeat how many times? ");
scanf("%d", &count);
printf("%s\n", message);
for(i = 0; i < count; ++i)
{
printf("%3d - %s\n", i, message);
}
return 0;
}
結果:事前に
Repeat how many times? 3
Hello, World!
0 - Hello, Wor
1 - Hello, Wor
2 - Hello, Wor
感謝。
、未定義の動作を記述します。 – EOF
あなたは10を保持する配列に14文字(13プラスゼロバイト)を書いています。あなたはスタックを壊しており、そのポイントの後のすべては未定義の動作です。細心の注意を払う! –
*定義されていない動作*を説明するのは実際には有効ではありませんが、適合すれば満足できるものです。 *おそらく*あなたが 'i'を使い始めたとき、文字列が壊れてしまいました。これは長さが不十分なために' i'にあふれました。 –