printf如何知道格式参数的长度?

Mas*_*tic 4 c c++ assembly printf

int printf (const char* format, ... );
Run Code Online (Sandbox Code Playgroud)

这是printf的签名.我不明白的是,printf如何知道第一个参数的长度(the const char* format).

它知道开始(因为它是一个指针,我得到它),但指针没有结束或什么.通常当你想要打印一些东西时你必须给出一个长度(例如,Linux sys_write),那么printf如何知道呢?

编辑:

我一直在查看我在ASM中编写的代码,我认为它只是寻找一个\0字符.那是对的吗?

Thi*_*ter 11

它是一个以null结尾的字符串(与C中的所有字符串一样),因此第一个ASCII NUL('\0'或普通0)字节表示字符串的结尾.

如果你"meow"在C中有一个字符串,它实际上使用5个字节的内存,在内存中看起来像这样.的\0明显是一个值为0的单个字节.

meow\0
Run Code Online (Sandbox Code Playgroud)

如果你想知道如何表示实际'0'数字:数字0..9的ASCII值为48..57,所以在第三个位置"me0w"48字节.