程序清单4.1 talkback.c程序 // talkback.c -- 演示与用户交互
#include #include // 提供strlen()函数的原型
#define DENSITY 62.4 // 人体密度(单位:磅/立方英尺)
int main() { float weight, volume; int size, letters; char name[40]; // name是一个可容纳40个字符的数组
printf("Hi! What's your first name?\n");
scanf("%s", name);
printf("%s, what's your weight in pounds?\n", name);
scanf("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume);
printf("Also, your first name has %d letters,\n", letters);
printf("and we have %d bytes to store it.\n", size);
return 0;
}
原代码会在运行程序时,显示第一个printf后结束
解决方法:scanf_s("%s", name,40);
scanf()不会检查输入边界,可造成数据溢出。
scanf_s()会进行边界检查。
从vc++2005开始,VS系统提供了scanf_s(), 在调用该函数时,必须提供一个数字以表明最多读取多少位字符。
修改后,代码正常运行。