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(***)的字段就编译通过了。

你可能感兴趣的:(C语言教学)