【发布时间】:2022-11-19 01:10:54
【问题描述】:
所以这是我的代码
#include<math.h>
#include<stdio.h>
#include"hw1.h"
int main (int argc, char *argv[]) {
int num_choices, k;
char right_choices[20];
do {
printf("Enter number of choices:\n");
scanf("%d", &num_choices);
}
while ((num_choices > 26) || (num_choices < 1));
num_choices = num_choices - 1 + 'A';
printf("Max choice:%c\n", (char)num_choices);
printf("Enter answer key:\n");
for( k=1; k < 20; k++)
scanf(" %c", &right_choices[20]);
return 0;
}
虽然编译一切似乎没问题。在运行第二个 scanf 时应该运行 20 次,但每次它在 19 时停止并显示:“zsh abort”
我尝试这样做 10 次以查看是否是问题所在,但第 9 次出现相同的消息。它总是停在 n-1。
同样的代码在linux上完美运行。
非常感谢!
我搜索了问题,但没有找到任何有用的信息
【问题讨论】:
-
你的循环应该是 for (k = 0; k < 20; ++k)。此外,您通过访问偏移量 20 溢出了 right_choices[] 数组。C 中的数组从索引 0 开始。您是要使用“k”而不是 20 作为索引吗?
-
&right_choices[20]破坏数组。此外,除了举报外,您不使用num_choices。 -
我也怀疑它是否能在 Linux 上完美运行。 :-)
-
尝试在出现第一个提示时按 ctrl-d(或在 Windows 中按 ctrl-z return)。 :)
-
你可能在 Mac 上运行它吗? Linux 可能会告诉您
Segmentation fault,而 Windows 只会说Access violation exception。这两者都意味着以下两件事之一:1)空指针异常或 2)你正在踩到未初始化的东西。在这种特殊情况下,它是带有scanf(" %c", &right_choices[20]);的 20 长数组的索引 20
标签: c visual-studio-code zsh abort