Richard

型别引发的讨论

0
阅读(2170)

先看下面这段程序:

#include <stdio.h>
int main()
{
int i;
char c;
for(i = 0; i < 5; i++)
{
scanf("%d", &c);
printf("%d ", i);
}
printf("\n");
return 0;
}

很短是吧?有什么bug吗?哈哈。一个型别为char的变量c,但是有这样一个语句:scanf("%d", &c)。读入一个int型别德数据但是存放在一个char型别的变量当中。如果你在Virual C++中编译执行这段程序,no problem!但是我不能保证在别的编译器当中不出问题。和TuQ讨论了一下。你读入了四个字节(int的数据),但是放在了一个字节的地盘(char的变量内存),那么这一个字节之后的三个字节将被覆盖,这就是问题所在。如果这三个字节的内存是你的有用地盘(依赖于编译器),那么毫无疑问将出乱子;倘若这三个字节在你的程序中不是有用的,那么你很幸运。所以这是一个未决的问题,但是尽量避免。