nullターミネータを忘れています。
C 文字列は\0、文字列の終わりを示すために、末尾に 1 バイトが必要です。出力が奇妙に見える理由はprintf、ヌル ターミネータを探している が初期化されていないメモリに迷い込み、未定義の動作を引き起こすためです。
この場合、printf幸運なことに null をすぐに見つけて、ガベージを出力した後に正常に終了するように見えます。ただし、この種のバグにより、多くの場合、メッセージが表示されてプログラムがクラッシュしますsegmentation fault。「セグ フォールト」は、オペレーティング システムがプロセスを強制終了したときに発生します。これは、プロセスに属していないメモリを読み取るなど、想定外のことを実行しているために発生します。
代わりにこれを試してください:
char s[] = "Hello"; //s is now 6 characters long.
数値を指定しないことで、コンパイラは必要な配列の大きさを決定し、"Hello"データをそこにコピーします。
変更したくない文字列が必要な場合は、代わりに次のように宣言する必要があります。
const char* s = "Hello";
このようにして、文字列を含む静的メモリを指すポインターを作成しました"Hello"。コピーは必要ありません。