我试图了解它的工作原理。
#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
答案 0 :(得分:1)
printf
为您提供的每种格式说明符从堆栈中读取一定数量的字节。格式说明符必须与实际参数匹配,否则最终可能会导致部分读取参数或读取超出参数边界的数据。
在您的第一条语句中,第一个参数是double
,因此%f
是正确的格式说明符。使用%d
可能导致printf
尝试读取的字节数超过为该参数提供的字节数,从而导致未定义的行为。第二个参数的类型为size_t
,它需要%zu
或该类型的另一个有效说明符。