gpt4 book ai didi

C:为什么用 %s 打印空字符会打印 "(null)"?

转载 作者:太空狗 更新时间:2023-10-29 14:51:58 25 4
gpt4 key购买 nike

为什么用 %s 打印空字符 ('\0', 0) 实际上打印的是 "(null)"字符串?

像这样的代码:

char null_byte = '\0';
printf("null_byte: %s\n", null_byte);

...打印:

null_byte: (null)

...它甚至可以在 Valgrind 下正常运行,我得到的只是编译器警告 warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [ -Wformat](注意:我在 32 位 Ubuntu 上使用 gcc 4.6.3)

最佳答案

这是未定义的行为,但它发生在您的实现中:

  • 您传递的 int 值 0 被 %s 读取为空指针
  • printf%s 的处理有特殊情况的代码来识别空指针并打印 (null)

这些都不是标准所要求的。需要[*]的部分是将可变参数中使用的 char 作为 int 传递。

[*] 好吧,这是必需的,因为在您的实现中 char 的所有值都可以表示为 int。如果您正在使用一些有趣的实现,其中 char 是无符号的并且宽度与 int 相同,它将作为 unsigned int 传递。我认为有趣的实现符合标准。

关于C:为什么用 %s 打印空字符会打印 "(null)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com