因为这是vs2022
你想继续用scanf可以这样设置
您好,这个问题以前我也遇到过。
scanf_s是C11标准中的函数,与scanf的功能类似,但具有更强的安全性。
这个在读取字符串时,需要指定缓冲区的最大长度,以防止缓冲区溢出。
char str[100];
scanf_s("%99s", str, sizeof(str));
我上面这个写法,就是说最大缓冲区是99个字符,类型是字符串,你这样写试试,其实scanf也是可以用的,关闭告警提示就行了,但是我还是建议你使用最新的。
#define _CRT_SECURE_NO_WARNINGS
放在文件开头
在调用scanf_s函数时,必须在可变参数表中提供一个数字来表明最多读取多少个字节的字符,另外很多额外带_s后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免访问到不存在的元素。
所以上面那段代码在VS2019里要这样写:
#include<stdio.h>
int main()
{
char s[10];
scanf_s("%s",s,10);
printf("%s",s);
return 0;
}
scanf_s("%s", a,10);表示用户最多可以最多输入9个字符,这种情况程序可以正常编译运行,如果用户输入字符超过9个,程序运行结果就会出错。scanf_s函数的可变参数表里的10表示可以输入9个字符,因为s[9]里要存放'\0'字符。