如何修复附件 K 中的安全函数发出的 运行 时间错误?

How do I fix a run-time error emitted by a safe function from Annex K?

我从 C 开始,我需要编写一个程序来输出给定整数的 ASCII 字符。

这是我的:

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Enter an ASCII code: ");
    scanf_s("%d", &ch);

    printf("The character for %d is %c\n", ch, ch);
}

我收到一个 运行 时间错误,提示变量已损坏,但是 window 弹出允许我输入一个整数,程序给出了正确的输出。

如何修复此 运行 时间错误?

chchar 类型的变量,但您正尝试使用 %d 读取它,这是 int 的格式说明符。这意味着您的 scanf 覆盖了不应该覆盖的额外内存。将 ch 的声明更改为:

int ch;

你的程序应该可以正常工作。

%d 格式说明符需要 int * 作为参数,但您传递的是 char *。因为 char 小于 int,函数将尝试写入比变量可以容纳的更多的字节。这会调用 undefined behavior,在您的情况下会导致崩溃。

要么将 ch 的类型更改为 int,要么使用需要 char *.

%hhd 格式说明符