首页 > 解决方案 > 如何修复c中的scanf_s函数?

问题描述

我正在尝试制作一个“tik-tak-toe”程序,并试图让它重复,所以我使用了一个 while 循环。我要求用户输入 1 表示是,输入 2 表示否。之后我有一个 scanf_s 声明。出于某种原因,当我输入 yes 并按 enter 时,visual studios 2015 会给我一个警告:

“tick-tack-toe.exe 中 0x5D14B5F2 (ucrtbased.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000001。” 当我按 2 表示否时,此警告不会出现。

我使用调试器查找出了什么问题,我发现它是 scanf_s 语句。我试图让它只是一个常规的 scanf 语句但是当我运行代码时说代码失败并且错误是,

“‘scanf’:此函数或变量可能不安全。请考虑改用 scanf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。” 我已经浏览了整个互联网并尝试了我发现的所有内容,但没有任何效果。:(

int repeat = 1;
while(repeat == 1){
    printf("do you want to play again \n 1.yes \n 2.no \n");
    scanf_s("%d", repeat);
}

我希望当我按 1 时我的代码会回到开头,但它会出错。

标签: cvisual-studio-2015

解决方案


请仔细阅读这些函数的原型,具体看如何传递参数:

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-sl-wscanf-s-wscanf-sl?view=vs-2019

提示:您以错误的方式传递“重复”。

另请注意:

“0x5D14B5F2 处未处理的异常

这不是警告,更像是程序崩溃/致命错误。


推荐阅读