C - 将重复的数组记录写入文本文件

时间:2017-12-02 16:18:52

标签: c arrays file

  

在这个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的初学者,我找不到解决这个问题的方法。任何        有用的想法来修复我的代码?谢谢!

1 个答案:

答案 0 :(得分:1)

您正在使用未定义的行为访问数组索引超出范围。

for(i = SIZE ; i > 0 ; i--)

将是

for(i = SIZE-1 ; i >= 0 ; i--)

在C中,数组索引从0开始。您可以使用索引SIZE访问具有0,1,...SIZE-1个元素数的结构数组。 [0索引。当您访问具有索引SIZE的元素时,您已经从不允许的数组中访问了内存 - 导致未定义的行为。

进一步说明:

您可能会访问一些不属于您的程序的内存,这会使您的程序崩溃(访问您的程序不应该访问的内存)。或者这可能会改变程序所拥有的某些内存,从而导致错误的结果。(如果只读,则会产生错误)。

相关问题