\0
Cの入門コースで、文字列を保存するときに末尾にヌル文字が付くことを学びました。しかし、次の文で文字列printf("hello")
がヌル文字で終わらないことが判明したとしても、文字列を印刷したい場合はどうでしょうか。\0
printf("%d", printf("hello"));
Output: 5
しかし、これは矛盾しているように思われます。私の知る限り、文字列のような変数はメイン メモリに格納され、何かを印刷するときにもメイン メモリに格納される可能性があると思いますが、なぜ違いがあるのでしょうか。
ベストアンサー1
ヌルバイトは文字列の終わりを示します。これは文字列の長さにはカウントされず、 で文字列を印刷するときには印刷されませんprintf
。基本的に、ヌルバイトは文字列操作を行う関数に停止するタイミングを指示します。
違いが見られるのは、char
文字列で初期化された配列を作成する場合です。sizeof
演算子を使用すると、null バイトを含む配列のサイズが反映されます。例:
char str[] = "hello";
printf("len=%zu\n", strlen(str)); // prints 5
printf("size=%zu\n", sizeof(str)); // prints 6