在0x 00007 FFB 3EEB 2181(ucrtbased.dll)处引发异常-即使是在其他编译器上运行的程序也是如此?(Visual Studio社区版本)

gab6jxml  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(140)

我是C编程的新手。我一直在尝试运行这个程序,它在在线编译器上运行得很好。我试过改变C语言的语言版本。当我运行程序并写一个字符串时,它什么也不打印,只是停止了程序。然后我试着调试它,看看有什么问题,它显示了“在0x00007FFB3EEB2181抛出异常(ucrtbased.dll)。我正在使用最新的Visual Studio(社区版)。如果有人能帮助我解决这个问题,我将非常感激。有时我甚至会因为一个错误而得到一些无用的错误。(例如,我忘记放置结束括号,编译器抛出了许多错误,包括结束括号之一)我的应用程序是curropted或有一些设置丢失?

#include <stdio.h>

int main()
{

    char str[20];
    printf("Enter something\n");

    // Here \n indicates that take the input
    // until newline is encountered
    scanf_s("%[^\n]s", str);
    printf("%s", str);
    return 0;
}
aor9mmx1

aor9mmx11#

而不是调用scanf

scanf_s("%[^\n]s", str);

你需要写

scanf_s("%[^\n]", str, ( rsize_t )20 );

scanf_s("%[^\n]", str, ( rsize_t )sizeof( str ) );

来自C标准(K.3.5.3.2 fscanf_s函数)
4fscanf_s函数等效于fscanf,不同之处在于c、s和[转换说明符应用于一对参数(除非用 * 表示隐藏赋值)。这些参数中的第一个与fscanf相同。在参数列表中,该参数后面紧跟第二个参数,它的类型为rsize_t,给出了数组中第一个参数所指向的元素个数。如果第一个参数指向一个标量对象,则它被认为是一个元素数组。3
这同样适用于函数scanf_s
您可以使用scanf代替scanf_s,例如

scanf("%19[^\n]", str);

相关问题