【问题标题】:Why printf works as intended here?为什么 printf 在这里按预期工作?
【发布时间】:2022-08-02 16:34:58
【问题描述】:

为什么这段代码实际上会打印出 \"HI!\" ? char *s 是字符串第一个字符的地址,因此在下一行代码中,当我们将变量 s 放入 printf 时,它应该将该字符的地址返回给 printf,这显然不能用%s 表示为字符串。但确实如此。为什么?

#include <stdio.h>

int main(void)
{
        char *s = \"HI!\";
        printf(\"%s\\n\", s);
}
  • C 中的字符串是引导第一个空字符的一系列连续字符。因此,虽然s 指向存储H 的地址是正确的,但更正确的说法是它也指向一个字符数组:{\'H\', \'I\', \'!\', \'\\0\'}%s 格式说明符告诉printf 包含从地址s 开始的每个字符,直到第一个空字符。
  • printf 函数只是冰山一角。在它下面有大量的子例程,具体取决于格式化字符串。也就是说,当您放置 %s 格式化程序时,printf 将寻找 char 类型指针在参数中,因为它需要在内部使用该指针。

标签: c pointers printf


【解决方案1】:

如果你想打印地址,你必须写printf("%p\n", s);而不是printf("%s\n", s);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 2017-06-08
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多