我从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);
}
我收到一个运行时错误消息,指出变量已损坏,但是,弹出窗口允许我输入整数,程序给出了正确的输出。
如何解决此运行时错误?
答案 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
来读它,int
是scanf
的格式说明符。这意味着您的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
您的程序应该可以正常工作。