繁体   English   中英

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

[英]How does printf know the length of the format argument?

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

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

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

编辑:

我一直在查看我在ASM中编写的代码,我认为它只是查找\\0 char。 那是对的吗?

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

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

meow\0

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

正确声明字符串后,它的末尾始终有一个NULL(\\ 0)值,该标记用于标记所有这些打印函数的字符串结尾。 如果省略(在大多数情况下很难做到),打印功能将只保留打印内存,直到它在内存中运行为0值。

“Anything”是以\\ 0结尾的char数组

编辑:'\\ 0'== 0和'0'!= 0

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM