如何修复附件 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 弹出允许我输入一个整数,程序给出了正确的输出。
如何修复此 运行 时间错误?
ch
是 char
类型的变量,但您正尝试使用 %d
读取它,这是 int
的格式说明符。这意味着您的 scanf
覆盖了不应该覆盖的额外内存。将 ch
的声明更改为:
int ch;
你的程序应该可以正常工作。
%d
格式说明符需要 int *
作为参数,但您传递的是 char *
。因为 char
小于 int
,函数将尝试写入比变量可以容纳的更多的字节。这会调用 undefined behavior,在您的情况下会导致崩溃。
要么将 ch
的类型更改为 int
,要么使用需要 char *
.
的 %hhd
格式说明符
我从 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 弹出允许我输入一个整数,程序给出了正确的输出。
如何修复此 运行 时间错误?
ch
是 char
类型的变量,但您正尝试使用 %d
读取它,这是 int
的格式说明符。这意味着您的 scanf
覆盖了不应该覆盖的额外内存。将 ch
的声明更改为:
int ch;
你的程序应该可以正常工作。
%d
格式说明符需要 int *
作为参数,但您传递的是 char *
。因为 char
小于 int
,函数将尝试写入比变量可以容纳的更多的字节。这会调用 undefined behavior,在您的情况下会导致崩溃。
要么将 ch
的类型更改为 int
,要么使用需要 char *
.
%hhd
格式说明符