由printf中的%s在c中打印int

由printf中的%s在c中打印int,c,string,C,String,编译器不会将其标记为任何错误 我知道这是错误的, 但我想知道为什么它会显示公司的名称 如果我键入任何小于4的值,它不会显示此消息, 它为不同的此类值提供不同的输出,请尝试一些 值,如50、100等。 为什么它显示出如此奇怪的输出 这是节目单。 您对int数据类型使用了错误的说明符。它未定义的行为。任何事情都有可能发生 任何事情都有可能发生;该标准没有规定任何要求。该程序可能无法编译,或者可能会错误地执行,要么崩溃,要么默默地生成错误的结果,或者可能会意外地完全按照程序员的意图执行 您的程序行为

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

我知道这是错误的, 但我想知道为什么它会显示公司的名称

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

这是节目单。
您对int数据类型使用了错误的说明符。它未定义的行为。任何事情都有可能发生

任何事情都有可能发生;该标准没有规定任何要求。该程序可能无法编译,或者可能会错误地执行,要么崩溃,要么默默地生成错误的结果,或者可能会意外地完全按照程序员的意图执行

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

确切地说,它为什么会给出它的值取决于猜测。编译器还保留吃掉您的猫的权利。你的狗因为void main不符合后来的C标准


C故意不阻止您这样做,因为这样会影响语言的性能。这很难,虽然不是不可能,因为C是静态类型的,编译器会警告您这一点。

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

首先,你应该真正开始使用最低标准。 这里缺少很多代码,当然您使用的是无效的格式说明符。 您以int开头,但尝试将其打印为字符串%d而不是%s 还有你的主函数,它不正常,返回类型也丢失了。 这就是您需要的:

#include<stdio.h>

int main(void){

    int a=6;

    printf("%d",a);
    return 0;
}

你为什么用s标签?它是UB。不要试图去理解它。根据定义,它可以做任何事情,包括按预期工作。如果不忽略警告,则很容易看出它是不对的。[更轻的提示]在c中打印int,由printf中的%s打印--用猎枪射击你的脚,你将获得与前面相同的效果。:-请不要有不可读的屏幕副本。以文本形式发布源代码和输出。实际上,根据实际参数检查printf和scanf格式是非常常见的。但博尔兰是如此古老,它不太可能检查任何东西。
#include<stdio.h>

int main(void){

    int a=6;

    printf("%d",a);
    return 0;
}