int printf (const char* format, ... );
这是printf的签名。
我不明白的是,printf如何知道第一个参数(const char* format)的长度。
它知道开头(因为它是一个指针,我理解这一点),但指针没有结束或其他东西。通常当你想打印某些内容时,你必须给出一个长度(例如Linux的sys_write),那么printf如何知道呢?
编辑:
我已经更仔细地查看了我在ASM中编写的代码,我认为它只是寻找一个\0字符。这正确吗?
它是一个以null结尾的字符串(就像C语言中的所有字符串一样),因此第一个ASCII NUL ('\0'
或纯粹的 0
) 字节表示该字符串的结尾。
如果您在C语言中有一个字符串"meow"
,它实际上使用了5个字节的内存,并且在内存中看起来像这样。显然,\0
是一个值为0的单个字节。
meow\0
如果你想知道一个实际的 '0'
数字是如何表示的:数字0..9具有ASCII值48..57,因此"me0w"
的第三个位置会有48
字节。
它不知道。尝试使用printf("Hello \0 World\n");
。printf
不知道该字符串包含15个字符。
48
被解释为零,而0被解释为NULL。 - MasterMastic