解决scanf_s函数报错:没有为格式字符串传递足够的参数

解决scanf_s函数报错:没有为格式字符串传递足够的参数报错:scanf_s函数报错:没有为格式字符串传递足够的参数这个问题很变态解决办法:在使用%c和%s读入字符或字符串时,应在地址参数后附加一个缓冲区边界值。intmain(){ chars1[20]=”imname”; char*p1,*p2; chars3[10]={0}; p1=s1; p2=s3; printf(“请输入你的名字:\n”);//scanf_s(“%s”,&s3); scanf_s(“%s”,&.

报错:scanf_s函数报错:没有为格式字符串传递足够的参数

int main() {
	char s1[20] = "i m name";

	char *p1, *p2;
	char s3[10] = {0};

	p1 = s1;
	p2 = s3;
	printf("请输入你的名字: \n");
    scanf_s("%s",&s3);

	printf("%s\n", s3);

	for (; *p1 != '\0'; p1++) {
		if (*p1 == *p2) {
			p2 = s3;
		}
		printf("I am %s\n", s3);
	}

	while (true){}
  return 0;
}

这个问题很变态

解决办法:在使用%c和%s读入字符或字符串时,应在地址参数后附加一个缓冲区边界值。 

int main() {
	char s1[20] = "i m name";

	char *p1, *p2;
	char s3[10] = {0};

	p1 = s1;
	p2 = s3;
	printf("请输入你的名字: \n");
    //scanf_s("%s",&s3);
	scanf_s("%s",&s3,sizeof(s3));   //使用sizeof

	printf("%s\n", s3);

	for (; *p1 != '\0'; p1++) {
		if (*p1 == *p2) {
			p2 = s3;
		}
		printf("I am %s\n", s3);
	}

	while (true){}
  return 0;
}

总结;就会提示你没有为格式字符串传递足够的参数。
首先我们来看一下scanf和scanf_s的区别
scanf()不会检查输入边界,可能造成数据溢出。
scanf_s()会进行边界检查。
scanf()函数是标准C中提供的标准输入函数,用以用户输入数据
scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。

上面的程序有点复杂;下面来一个简单点的例子:

int main(void) {
	char str1[30] = { 0 };
	char str2[30] = { 0 };
	char str3[30] = { 0 };
	//gets() 用法
	printf("Input a string: ");
	gets_s(str1);
	//scanf() 用法
	printf("Input a string: ");
	scanf_s("%s", str2);
	scanf_s("%s", str3);

	printf("\nstr1: %s\n", str1);
	printf("str2: %s\n", str2);
	printf("str3: %s\n", str3);
	while (true){}
	return 0;
}

上面的代码当你输入字符串的时候会报错:没有为格式字符串传递足够的参数

解决scanf_s函数报错:没有为格式字符串传递足够的参数

解决办法:在使用%c和%s读入字符或字符串时,应在地址参数后附加一个缓冲区边界值。 

解决scanf_s函数报错:没有为格式字符串传递足够的参数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35876.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注