【问题标题】:Exception in c scanf_sc scanf_s 中的异常
【发布时间】:2019-04-27 12:13:20
【问题描述】:

我正在尝试编写一个简单的代码来输入 int 和 char 的值。 Visual Studio 抛出异常

#include<stdio.h>
int main() {

    int i;
    char c;

    printf(" Enter the values");
    scanf_s("%c %d",&c,&i);

    return 0;
}

当我运行程序并输入值时,Visual Studio 抛出异常:在 main.exe 中的 0x599C939E (ucrtbased.dll) 处抛出异常:0xC0000005:访问冲突写入位置 0x0032133E

【问题讨论】:

  • @HansPassant — 大小适用于字符输入,也不适用于整数。
  • @HansPassant, Jonathan Leffler:也许我的评论并不像某些人所怀疑的那样虚假?我从未见过正确使用_s-family 函数。

标签: c visual-studio exception


【解决方案1】:

您需要指定要为 char 分配的内存大小。

 scanf_s("%c %d",&c,1,&i);

不会返回任何错误。 由于 scanf() 函数有点“不安全”,VS 强制你使用 scanf_s 函数,这是一个更安全的选择。 这样,用户将无法欺骗输入。

【讨论】:

    【解决方案2】:

    对于c and s这样的格式说明符,需要在参数列表中的相应指针之后指定缓冲区的大小。

    在你的情况下,函数调用看起来像

    scanf_s("%c %d",&c, 1, &i);
    

    对于格式说明符s,缓冲区的大小也必须考虑到终止零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2011-07-06
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多