写了一个c程序,是关于用fwrite向文件写入数据的。但是怎么也写不进去,文件总是空的。有问题的代码如下。
.....
.....
fp2=fopen(strcat(filename,p->name),"ab");
r=(GUinform *)malloc(sizeof(GUinform));
printf("input your information below:\n\n");
printf("Name: ");
scanf("%s",&r->name);
printf("Sex:1.male 2.female ");
scanf("%d",&r->sex);
printf("Adress: ");
scanf("%s",&r->adress);
printf("Phone: ");
scanf("%s",&r->phone);
count++;
fwrite(r,sizeof(struct GUinform),1,fp2);
filename[NUM]="GUEST_INFORMATION\\";
break;
fclose(fp2);
.....
.....
检查了半天,发现如果把fclose(fp2)放在break之前,就能写进去了。这就说明,是文件没有关闭的原因。于是查书,发现以下说明:
“应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将会丢失数据。因为,在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,可以解决这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。”
觉得这是此问题的解决良方。而文件未关闭导致数据丢失也是失败的主要原因。
但是,如果再测试别的,比如,写一个简单的。如下:
#include <stdio.h>
main(){
FILE *fp;
char ch[]="this is a test.";
fp=fopen("filename","wb");
fwrite(ch,15,1,fp);
}
发现,即使不写fclose(fp),也能写入到文件。不禁困惑了。为什么这个违反规则可以,而上面那个却不可以?