插入数组到文件错误

时间:2014-01-08 14:31:52

标签: c file segmentation-fault

我使用以下代码将结构数组插入到文件中但它崩溃了:

void SaveInFile(List * pl)
{

        int i;
        int s = ListSize(pl);

        file = fopen("myFile.txt", "w");        //3shan aktb 3la file mn gded 
        for (i = 0; i <= s; i++) {
                file = fopen("myFile.txt", "a");
                fprintf(file, "IDOfprocess%s/n", pl->entry[i].ID);
                fprintf(file, "IDOfprocess%s/n", pl->entry[i].BurstTime);
        }
        fclose(file);
}

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您的for循环已到达s,并且您从0开始(因此您正在处理s+1元素,而不是s元素

所以它应该是

for( i=0;i<s;i++){

答案 1 :(得分:1)

您正在多次打开文件而不关闭它。 这样做:

void SaveInFile(List* pl)
{

int i;
int s=ListSize(pl);

file=fopen("myFile.txt","w");//3shan aktb 3la file mn gded 
fclose(file);
for( i=0;i<=s;i++){

file=fopen("myFile.txt","a");
fprintf(file,"IDOfprocess%s/n",pl->entry[i].ID);
fprintf(file,"IDOfprocess%s/n",pl->entry[i].BurstTime);

fclose(file);
}
}

如果不关闭文件,则不会将任何未写入的输出缓冲区的内容写入文件。

但你应该做的是打开文件一次并执行追加操作:

void SaveInFile(List* pl)
{

int i;
int s=ListSize(pl);

file=fopen("myFile.txt","w");//3shan aktb 3la file mn gded 
fclose(file);

file=fopen("myFile.txt","a");
for( i=0;i<=s;i++){

fprintf(file,"IDOfprocess%s/n",pl->entry[i].ID);
fprintf(file,"IDOfprocess%s/n",pl->entry[i].BurstTime);
}
fclose(file);
}