如何解决附件K中安全功能发出的运行时错误?

时间:2019-09-17 21:54:58

标签: c scanf c11

我从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);
}

我收到一个运行时错误消息,指出变量已损坏,但是,弹出窗口允许我输入整数,程序给出了正确的输出。

如何解决此运行时错误?

2 个答案:

答案 0 :(得分:2)

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

int的类型更改为%hhd,或使用char *格式说明符,期望使用$("#btnSubmit").click(function() { $("#btnSubmit").prop("disabled", true); // do your work here, waiting for success or failure $('#btnSubmit').prop("disabled", false); })

答案 1 :(得分:1)

ch是类型char的变量,但是您试图使用%d来读它,intscanf的格式说明符。这意味着您的ch会覆盖不应该写入的额外内存。将您的int ch; 声明更改为:

W20190918-11:37:00.641(5)? (STDERR) /home/waqas/Documents/code-base/myproject/.meteor/local/build/programs/server/packages/modules.js:3284
W20190918-11:37:00.644(5)? (STDERR)             ...this._options,
W20190918-11:37:00.645(5)? (STDERR)             ^^^
W20190918-11:37:00.645(5)? (STDERR)           
W20190918-11:37:00.645(5)? (STDERR) SyntaxError: Unexpected token ...
W20190918-11:37:00.645(5)? (STDERR)     at Object.exports.runInThisContext (vm.js:53:16)
W20190918-11:37:00.646(5)? (STDERR)     at /home/waqas/Documents/code-base/myproject/.meteor/local/build/programs/server/boot.js:287:30
W20190918-11:37:00.646(5)? (STDERR)     at Array.forEach (native)
W20190918-11:37:00.646(5)? (STDERR)     at Function._.each._.forEach (/home/waqas/.meteor/packages/meteor-tool/.1.4.1_3.1ujjc8o.xamr++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
W20190918-11:37:00.647(5)? (STDERR)     at /home/waqas/Documents/code-base/myproject/.meteor/local/build/programs/server/boot.js:128:5

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