4
int printf (const char* format, ... );

これは printf の署名です。私が理解していないのは、printf が最初の引数 ( const char* format) の長さをどのように知るかということです。

開始点は知っていますが (それはポインターなのでわかります)、ポインターには終了点などはありません。通常、何かを印刷したい場合、長さを指定する必要があります (たとえば、Linux のsys_write)。

編集:

ASM で書いたコードをもう少し調べてみたところ、\0char を探しているだけだと思います。あれは正しいですか?

4

3 に答える 3

11

これは null で終わる文字列 (C のすべての文字列と同様) であるため、最初の ASCII NUL ('\0'またはプレーン0) バイトは文字列の終わりを示します。

C に文字列がある場合、"meow"実際にはメモリ内で次のように見える 5 バイトのメモリを使用します。は\0明らかに、値が 0 の 1 バイトです。

meow\0

実際の'0'数字がどのように表現されるか疑問に思っている場合: 数字 0..9 は ASCII 値 48..57 を"me0w"持つため48、3 番目の位置にバイトがあります。

于 2013-03-17T23:48:14.147 に答える
1

文字列が適切に宣言されている場合、その末尾には常に NULL (\0) 値があり、そのマーカーは、これらすべての印刷関数の文字列の末尾をマークするために使用されます。省略された場合 (ほとんどの場合、実行するのは困難です)、印刷関数は、メモリ内の値が 0 になるまでメモリを印刷し続けます。

「何でも」は ing \0 で終わる char 配列です

編集: '\0' == 0 および '0' != 0

于 2013-03-18T00:00:03.127 に答える
0

それはわからない。試してみてくださいprintf("Hello \0 World\n");printfその文字列が 15 文字であることを知りません。

于 2013-03-18T12:54:29.753 に答える