【问题标题】:printing int in c by %s in printf在 printf 中由 %s 在 c 中打印 int
【发布时间】:2015-07-22 10:55:09
【问题描述】:

编译器不会将其标记为任何错误。

  • 我知道错了,
  • 但我想知道为什么显示公司名称。

    1. 如果我输入任何小于 4 的值,它不会显示此消息,
    2. 它为不同的此类值提供不同的输出,尝试一些 50、100 等值。

    为什么会显示如此奇怪的输出。

这是程序。

void main()
{

  int a=6;

  printf("%s",a);

}

【问题讨论】:

  • 你为什么用s标签?
  • 这是 UB。不要试图理解它。根据定义,它可以做任何事情,包括按预期工作。
  • 如果你不忽略警告,那么你很容易看出它是不对的。
  • [轻点]printing int in c by %s in printf--- 用霰弹枪射击你的脚,你会得到和之前一样的效果。 :-)
  • 请不要有不可读的屏幕拷贝。以文本形式发布您的源代码和输出。

标签: c string


【解决方案1】:

您的程序行为未定义,因为%s 不是int 的有效格式说明符。

究竟为什么它会给你它所做的值取决于推测。编译器还保留吃掉你的猫的权利。鉴于void main() 不符合后来的 C 标准,你的狗。

C 故意不防止您这样做,因为这会损害语言的性能。编译器很难(尽管 C 是静态类型的,但并非不可能)警告您这一点。

【讨论】:

  • 根据实际参数检查printfscanf 格式实际上非常常见。但是 Borland 太古老了,它不可能检查任何东西。
【解决方案2】:

它显示的不是公司名称。编译器将6 视为指针并从该地址打印字符数据,直到找到转义序列\0 如果您使用不同的编译器编译此代码,您很可能会得到不同的结果,这就是它被称为未定义行为的原因,因为它在其他答案中被正确指出。

【讨论】:

    【解决方案3】:

    首先,您应该真正开始使用最低标准。 这里缺少很多代码,当然您使用的是无效的格式说明符。 您从 int 开始,但您尝试将其打印为字符串(%d 与 %s) 此外,您的 Main Function 也不行,并且返回类型也丢失了。 这就是你需要的:

    #include<stdio.h>
    
    int main(void){
    
        int a=6;
    
        printf("%d",a);
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      您对int 数据类型使用了错误的说明符。其未定义的行为。什么事情都可能发生。

      Undefined Behavior:

      任何事情都可能发生;该标准没有规定任何要求。程序可能无法编译,也可能执行不正确(崩溃或默默地生成错误结果),或者它可能恰好按照程序员的意图执行。

      【讨论】:

        猜你喜欢
        • 2013-08-18
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 1970-01-01
        • 2021-03-28
        相关资源
        最近更新 更多