gpt4 book ai didi

c - 快速问题,为什么 scanf_s 在运行时抛出异常?我很困扰

转载 作者:行者123 更新时间:2023-11-30 20:52:52 25 4
gpt4 key购买 nike

我正在尝试使用 scanf (或某些变体,如 scanf_s)将字符数组从标准输入流发送到(预定义的)字符数组变量中。

一旦用户按下回车键,Windows就会在运行时抛出错误(未处理的异常);一旦调用 scanf() 就会触发它..

我是使用 C 语言的新手,只是想以较低级别的方式了解使用变量的基础知识,这很有趣,但有时令人沮丧

我应该创建自己的 scanf 函数吗? - 如何做到这一点?

下面是不起作用的代码,其最简单的形式很容易让您阅读..(它实际上只是抛出异常的 scanf 部分..gah!)

代码下方是错误消息

#include <stdio.h> 
#include <stdlib.h>

int main()
{
char string[20];

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

scanf_s("%s", &string);



system("Pause");
return 0;
}

错误是:

Exception thrown at 0x1011E63C (ucrtbased.dll) in Project.exe: 0xC0000005: Access violation writing location 0x00760000.
Unhandled exception at 0xFEFEFEFE in Project.exe: 0xC00001A5: An invalid exception handler routine has been detected (parameters: 0x00000003).

最佳答案

几件事:

  1. 为什么要在未初始化的缓冲区string上调用printf?这是未定义的行为。
  2. 要正确使用 scanf_s 读取字符串,请使用:scanf_s("%19s\n", string, 20);。一般模式为 "%s", buffer, X,其中 X 是缓冲区的容量。另外,请注意它是 string,而不是 &string

也就是说,如果您坚持使用 scanf_sfgets 更适合读取字符串。

关于c - 快速问题,为什么 scanf_s 在运行时抛出异常?我很困扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com