我将接收用户输入,其中包含其标识和标记,由空格分隔。代码编译,我可以在提示符下输入答案,但是,在提示结束时(第一个循环结束)我得到一个"中止陷阱: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]);
}
}
答案 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]
之类的调试器可以帮助您查明代码中发生错误的位置。并且可能帮助你弄清楚你的错误。