将用户输入存储到两个数组中时中止陷阱

时间:2018-05-23 01:28:17

标签: c arrays scanf abort

我将接收用户输入,其中包含其标识和标记,由空格分隔。代码编译,我可以在提示符下输入答案,但是,在提示结束时(第一个循环结束)我得到一个"中止陷阱:6"出现。

如果您能帮助我找出为什么会出现此评论,我将不胜感激。我读到它可能来自我覆盖其他内存,但看起来我的循环不会超出我希望它们循环的范围(用户给我10个答案)。

我还在scanf中的数组前添加了&符号,我发现这很奇怪,但代码没有编译。

包括

int main(void){

char id[10];

int mark[10];

for (int i=0;i<10;i++){


    printf("Enter ID and mark: \n");



    scanf(" %s %d", &id[i], &mark[i]);
}
for (int i=0;i<10;i++){

    printf("%c ",id[i]);

}

}

1 个答案:

答案 0 :(得分:0)

我认为您的ID读取错误,您的ID是7个字符长度的字符串,而您的char id[10]是10个字符串的字符串(您打算使用字符串列表),您应该使用{{3相反。

char *ids[10] = { NULL }; // list of 10 string, initialized to NULL
int mark[10];
for (int i=0;i<10;i++){
    ...
    char* id=malloc(8*sizeof(char)); // allocate a new string to store
    scanf( "%7s %d\n", id, &mark[i] ); // check the result of the scanf to ensure you got the correct input
    ids[i] = id; // store the string at position in the list
}
for (int i=0;i<10;i++){
     printf("%s\n", ids[i]);
}

同样使用char *ids[10]之类的调试器可以帮助您查明代码中发生错误的位置。并且可能帮助你弄清楚你的错误。