printf如何知道format参数的长度?

How does printf know the length of the format argument?

本文关键字:参数 何知道 format printf      更新时间:2023-10-16
int printf (const char* format, ... );

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

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

编辑:

我一直在看我在ASM中写的代码多一点,我认为它只是寻找一个字符。对吗?

它是一个以空结尾的字符串(像C语言中的所有字符串一样),因此第一个ASCII NUL (''或普通0)字节表示字符串的结束。

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

meow

如果您想知道实际的'0'数字如何表示:数字0..9的ASCII值为48..因此,"me0w"的第三个位置是48字节

当正确声明字符串时,它的末尾总是有一个NULL()值,该标记用于标记所有这些打印函数的字符串的结束。如果省略它(在大多数情况下很难做到),打印函数将继续打印内存,直到它在内存中运行到0值。

"Anything"是一个以i结尾的字符数组ng

编辑:'' == 0 and '0' != 0

它不知道。试试printf("Hello Worldn");printf不知道该字符串包含15个字符