第一次用vs2022不是很会

img


为什么scanf不可以,是为什么,他要我用scanf_s,但我用完后无法输入而是原来的程序结果。
求解

因为这是vs2022
你想继续用scanf可以这样设置

img

您好,这个问题以前我也遇到过。

scanf_s是C11标准中的函数,与scanf的功能类似,但具有更强的安全性。

这个在读取字符串时,需要指定缓冲区的最大长度,以防止缓冲区溢出。

char str[100];
scanf_s("%99s", str, sizeof(str));

我上面这个写法,就是说最大缓冲区是99个字符,类型是字符串,你这样写试试,其实scanf也是可以用的,关闭告警提示就行了,但是我还是建议你使用最新的。


#define _CRT_SECURE_NO_WARNINGS

放在文件开头

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7492394
  • 这篇博客你也可以参考下:VS不能用scanf的解决办法
  • 除此之外, 这篇博客: VS使用scanf函数报错解决方法中的 scanf_s函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在调用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'字符。