gpt4 book ai didi

C printf int 和 double 相同结果不同假设

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

我正在尝试了解它是如何工作的。

#include<stdio.h> 
int main()
{
int a = 110;
double d = 10.21;
printf("sum d: %d \t\t size d: %d \n", a+d, sizeof(a+d));
printf("sum lf: %lf \t size lf: %lf \n", a+d, sizeof(a+d));
printf("sum lf: %lf\t size d: %d \n", a+d, sizeof(a+d));
printf("sum d: %d \t\t size lf: %lf \n", a+d, sizeof(a+d));
return 0;
}

输出为:

sum  d: 8        size  d: 1343288280 
sum lf: 120.210000 size lf: 0.000000
sum lf: 120.210000 size d: 8
sum d: 8 size lf: 120.210000

最佳答案

printf 为您提供的每个格式说明符从堆栈中读取一定数量的字节。格式说明符必须与实际参数匹配,否则最终可能会导致参数被部分读取或读取超出参数的边界。

在您的第一个语句中,第一个参数是一个 double,因此 %f 是正确的格式说明符。使用 %d 可能会导致 printf 尝试读取比为该参数提供的字节数更多的字节,从而导致未定义的行为。第二个参数的类型为 size_t,它需要 %zu 或该类型的另一个有效说明符。

关于C printf int 和 double 相同结果不同假设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56030400/

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