【问题标题】:Why this c program printing % after decimal value?为什么这个 c 程序在十进制值后打印 %?
【发布时间】:2016-11-27 08:05:12
【问题描述】:

为什么这个程序打印 4% 而不是 4?

#include <stdio.h>
int main() {
    printf("%lu", sizeof(int));
    return 0;
}

【问题讨论】:

  • 你确定打印%的不是shell而是你的程序吗?如果是这样,那应该是因为您通过将错误类型的数据传递给printf() 来调用未定义的行为。从sizeof 运算符返回的打印size_t 的正确格式是%zu
  • 我打赌你的 shell 是 C shell
  • 在数字后面加一个\n,让你的shell移动到下一行(假设shell是打印%字符的那个)。
  • 可能是 zsh,如果它检测到程序以光标在错误位置结束(即输出结束行不完整)

标签: c printf output sizeof


【解决方案1】:

这个程序只打印4

之后你可能会得到一个 shell 提示符(%)。

理想情况下应该是这样

 printf("%zu\n", sizeof(int));//zu is the right format specifier for  object of type size_t

请注意,我在下一行添加了 \n 以获取 shell 提示。

【讨论】:

    【解决方案2】:

    首先,sizeof 运算符产生size_t 类型的结果。您应该使用%zu 格式说明符来打印结果。

    使用错误的格式说明符(格式说明符的参数不匹配)调用undefined behavior

    也就是说,您在输出后没有要打印的 换行符,所以碰巧您只是在输出后立即返回 shell 提示符,您

    【讨论】:

      【解决方案3】:

      它只打印 4。

      结果 Codepad

      【讨论】:

        猜你喜欢
        • 2011-11-21
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 2014-09-18
        相关资源
        最近更新 更多