【发布时间】:2012-07-03 18:58:30
【问题描述】:
当我为以下程序提供 4 个整数作为输入(例如 a = 10、b = 20、d = 30、e = 40)时,它会计算 c = a + b = 0 和 f = d + e = 70。
我知道这种不寻常的行为是因为我为 short int 使用了错误的格式说明符,但这里到底发生了什么?为什么最后两个输入之和正确,而前两个数字之和总是=0?
#include<stdio.h>
void main()
{
short int a, b, c, d, e, f;
scanf("%d%d%d%d", &a, &b, &e, &d);
c = a + b;
f = d + e;
printf("%d\n%d\n", c, f);
}
【问题讨论】:
-
在许多平台上,
short的大小为 2 个字节,%d格式规范告诉scanf()目标有 4 个字节。所以考虑一下当scanf()将 4 个字节写入一个只有 2 个字节的变量位置时会发生什么。
标签: c memory short integer-overflow format-specifiers