用一个小例子代入一下:
编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。
如果代码这样写:
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(***)的字段就编译通过了。