配列内の文字を定義して文字列を出力する必要があります...しかし、常にstring7(この場合はtest7)として出力されます...ここで何が間違っていますか?
#include <stdio.h>
int main() {
char a[]={'t','e','s','t'};
printf("%s\n",a);
return 0;
}
なぜこの動作ですか?
\0
配列を終了しなかったため、得られるのはUndefined behaviorです。
舞台裏で何が起こっているのでしょうか?
にprintf
遭遇するまで文字列を印刷しようと\0
しますが、あなたの場合、文字列は\0
終了していないため、に遭遇するまでランダムに印刷され\0
ます。
割り当てられたメモリの境界を超えた読み取りは未定義の動作であるため、技術的にはこれは UB であることに注意してください。
問題を解決するために何をする必要がありますか?
必要なもの:
char a[]={'t','e','s','t',`\0`};
また
char a[]="test";
あなたの「文字列」、またはchar[]
は null で終了していないためです (つまり、 で終了しています\0
)。
次に、printf("%s", a);
の先頭からすべての文字を印刷しようとし、 が表示さa
れるまで印刷を続けます\0
。
これ\0
は配列の外側にあり、プログラムのメモリの初期状態に依存しますが、これはほとんど制御できません。
これを修正するには、使用します
char a[]={'t','e','s','t','\0'};
印刷する文字列はヌルで終了する必要があります...したがって、文字列宣言は、
char a[]={'t','e','s','t', '\0'};