C printf int和double same resault差异假定

时间:2019-05-07 20:59:54

标签: c printf

我试图了解它的工作原理。

#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

1 个答案:

答案 0 :(得分:1)

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

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