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