在这个C程序中,我有一个重复学生ID的数组。当我尝试 将它写入文本文件,它会跳过重复的值并写入 将剩余数据保存到文件中,每个重复值的值为0。但是我 我想把那个重复的记录写入文件。
这是我的代码;
int WriteData(struct Sales StoreSales[])
{
int i;
FILE *fptr;
fptr = fopen("reverseOrder.txt", "w");
if(fptr == NULL)
{
printf("\nError: File cannot be opened\n");
return -1;
}
fprintf(fptr, "\nStudent ID\tSales Amount\n");
for(i = SIZE ; i > 0 ; i--)
{
fprintf(fptr, "%d\t\t\t%d\n", StoreSales[i].StudentID,
StoreSales[i].amount );
}
fclose(fptr);
}
Here's my array;
301 -> 4
201 -> 3
657 -> 4
234 -> 9
301 -> 8
201 -> 4
由于我是C的初学者,我找不到解决这个问题的方法。任何 有用的想法来修复我的代码?谢谢!
答案 0 :(得分:1)
您正在使用未定义的行为访问数组索引超出范围。
for(i = SIZE ; i > 0 ; i--)
将是
for(i = SIZE-1 ; i >= 0 ; i--)
在C中,数组索引从0
开始。您可以使用索引SIZE
访问具有0,1,...SIZE-1
个元素数的结构数组。 [0索引。当您访问具有索引SIZE
的元素时,您已经从不允许的数组中访问了内存 - 导致未定义的行为。
您可能会访问一些不属于您的程序的内存,这会使您的程序崩溃(访问您的程序不应该访问的内存)。或者这可能会改变程序所拥有的某些内存,从而导致错误的结果。(如果只读,则会产生错误)。