warning C4473: “scanf_s”: 没有为格式字符串传递足够的参数(解决方法)

用一个小例子代入一下:
编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。
如果代码这样写:

int main(void)
{
 char fname[40];
 char lname[40];
 
 printf("Enter your first name: ");
 scanf_s("%s", fname);
 printf("Enter your last name: ");
 scanf_s("%s", lname);
 printf("%s, %s\n", lname,fname);
 
 return 0;
}

就会提示你没有为格式字符串传递足够的参数。
首先我们来看一下scanf和scanf_s的区别
scanf()不会检查输入边界,可能造成数据溢出。
scanf_s()会进行边界检查。

scanf()函数是标准C中提供的标准输入函数,用以用户输入数据
scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。

所以scanf_s需要输入三个参数,本例子中比scanf多输入一个数组的大小。所以程序这样修改:

int main(void)
{
 char fname[40];
 char lname[40];
 printf("Enter your first name: ");
 scanf_s("%s", fname,sizeof(fname));
 printf("Enter your last name: ");
 scanf_s("%s", lname,sizeof(lname));
 printf("%s, %s\n", lname,fname);
 return 0;
}

在后面加上sizeof(***)的字段就编译通过了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶孤舟渡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值