C primer plus第四章前导程序无法在vs中正常运行

程序清单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(), 在调用该函数时,必须提供一个数字以表明最多读取多少位字符。

修改后,代码正常运行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值