gpt4 book ai didi

c - 为什么 printf 从字面上打印 (null) 以及究竟发生了什么?

转载 作者:太空狗 更新时间:2023-10-29 14:54:46 36 4
gpt4 key购买 nike

在 C 编程练习中,我正在做这样的事情(只是简化):

printf( "%s", 0);

输出是

(null)

这里发生了什么?我假设 printf 将零解释为 char *,所以 NULL?我怎样才能通过类似的东西复制这个结果

char string[] = NULL; //compiler-error
printf( "%s", string);

?

最佳答案

首先,你的

printf("%s", 0);

导致未定义的行为 (UB)。 printf 中的 %s 需要一个 char * 指针作为参数。您正在传递 0,这是一个 int。仅此一项就已经破坏了您的代码,就像

printf("%s", 42); 

会。对于那个特定的 UB,0 是一个 的事实没有任何区别。

其次,如果你真的想尝试将空值传递给 %s 格式说明符,你必须做类似的事情

printf("%s", (char *) 0);

当然,这也会导致未定义的行为,因为 %s 需要一个指向有效字符串的指针作为参数,而 (char *) 0 不是有效的字符串指针。但是有些实现更喜欢优雅地处理这种情况,只打印 (null)

在您的特定情况下,您很幸运:printf("%s", 0)“工作”方式与 printf("%s", (char *) 0 相同) 将通过输出 (null) 和您的实现挽救这一天。

关于c - 为什么 printf 从字面上打印 (null) 以及究竟发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548440/

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