fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:
//读取一个完整的文件
#include
#include
int main()
{
FILE* pFile; //文件指针
long lSize; // 用于文件长度
char* buffer; // 文件缓冲区指针
size_t result; // 返回值是读取的内容数量
pFile = fopen("myfile.bin" , "rb");
if (pFile == NULL) {fputs("File error", stderr); exit(1);} // 如果文件错误,退出1
// 获得文件大小
fseek(pFile , 0 , SEEK_END); // 指针移到文件末位
lSize = ftell(pFile); // 获得文件长度
rewind(pFile); // 函数rewind()把文件指针移到由stream(流)指定的开始处, 同时清除和流相关的错误和EOF标记
// 为整个文件分配内存缓冲区
buffer = (char*) malloc(sizeof(char) * lSize); // 分配缓冲区,按前面的 lSize
if (buffer == NULL) {fputs("Memory error", stderr); exit(2);} // 内存分配错误,退出2
// 该文件复制到缓冲区
result = fread(buffer, 1, lSize, pFile); // 返回值是读取的内容数量
if (result != lSize) {fputs("Reading error", stderr); exit(3);} // 返回值如果不和文件大小,读错误
// terminate // 文件终止
fclose(pFile);
free(buffer);
return 0;
}
综合使用的例子。
#include
int main()
{
FILE* pFile;
float buffer[] = { 2.0 , 3.0 , 8.0 };
pFile = fopen("myfile.bin" , "wb"); // 打开文件写操作
fwrite(buffer , 1 , sizeof(buffer) , pFile); // 把浮点数组写到文件 myfile.bin
fclose(pFile); // 关闭文件
float read[3];
pFile = fopen("myfile.bin" , "rb"); // 重新打开文件读操作
fread(read , 1 , sizeof(read) , pFile); // 从文件中读数据
printf("%f\t%f\t%f\n", read[0], read[1], read[2]);
fclose(pFile); // 关闭文件
return 0;
}
无语的写法..
你根本分不清什么事数字 什么事字符
如果你要输出txt里面的内容比较简单.
char buf[1024];
fread(&stud[j],sizeof(struct student),1,fp1);
改成
fread(buf,1024,1,fp1);
printf 改成 printf(%s, buf);
如果你要把 txt里面的字符变成数据.
那就需要解析txt了
读了你的代码,我觉得,你在用fread的时候,其实你的意图是想将1.txt中的每一行按照你所定义的structure student中的字段格式,进行读取,将你的stud一个一个填充好。很遗憾,fread并不能做这件事情。fread会将1.txt中的每行看做一整个字符串,写到你给的每个&stud[j]开头的地址空间中,而无视你所给定的structure的定义,自然你printf就得不到预想的结果了。而fwrite倒是可以原原本本将写入的字串回写出来。
如果你想要按structure的格式读入1.txt的数据,那么就要用scanf咯。就像printf那样,scanf的用法你一定是懂的。