gpt4 book ai didi

c - 这个值从哪里来?

转载 作者:行者123 更新时间:2023-11-30 21:19:32 25 4
gpt4 key购买 nike

我正在学习 C 语言的转换说明符部分。我知道 %d 适用于在逗号后面打印值,但是我不明白为什么 printf当逗号后面没有值时打印一些内容。也没有编译错误。

#include <stdio.h>
int main(void) {

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

结果:13242433

谁能告诉我为什么当我运行这段代码时会出现这个随机数字?

最佳答案

这是什么?

未定义的行为。(检查 ref-1 ref-2 )

为什么会这样?

来自标准 7.21.6.1

The fprintf function writes output to the stream pointed to by stream, under control of the string pointed to by format that specifies how subsequent arguments are converted for output.If there are insufficient arguments for the format, the behavior is undefined

如何避免?

编译时也是如此

gcc -Wall -Wextra -Werror progname.c

给出错误(由于-Werror)

error: format ‘%d’ expects a matching ‘int’ argument [-Werror=format=]
printf("%d");
^

这足够清楚地告诉您出了什么问题。但你没有检查。

那么获取的值是多少?这只是垃圾值吗?

很可能 printf 在看到 %d 说明符时尝试从内存中读取一个 int 变量的值。但可惜的是,这段内存没有包含任何对你有意义的东西。 (甚至可能不允许访问该内存。)是的,这只是一些值 - 垃圾值。甚至不要认为每次你都会得到一些垃圾值(value) - 不要依赖它或类似的东西。这是未定义的行为。下次它可能会使您的程序崩溃或只是打印我的联系号码。1,2

1。答案的最后一部分解释了垃圾打印的可能原因。

2。 打印我的联系号码 - 只是指出它只是一个您不应该关心的垃圾值。此外,它是未定义的行为 - 即使看到垃圾值也不能保证每次都会发生。

关于c - 这个值从哪里来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847346/

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