问题描述
- 关于C/C++里FILE的fwrite和fread怎么用。 2C
-
int main() { Maillist *mal1 = new Maillist(""001""某某某""男""燕山大学""319970353@qq.com""15075318018""); Maillist *mal2 = new Maillist(""002""某某某""男""燕山大学""319970353@qq.com""15075318018""); FILE *fp2 *fp1; Maillist M N; int nSize = sizeof(*mal2); fp1 = fopen(""通讯录.txt""rb+""); fwrite(mal1 nSize 1 fp1); fwrite(mal2 nSize 1 fp1); fclose(fp1); fp2 = fopen(""通讯录.txt""rb+""); fread(&M nSize 1 fp2); M.showinfo(); List.push_back(M);}![图片说明](http://img.ask.csdn.net/upload/201605/18/1463538329_839515.png)这样是可以运行的。因为文件已经保存上了对吧,但是如果把前边的写入文件去掉然后就不能运行了 int main() { Maillist *mal1 = new Maillist(""001""某某某""男""燕山大学""319970353@qq.com""15075318018""); Maillist *mal2 = new Maillist(""002""某某某""男""燕山大学""319970353@qq.com""15075318018""); FILE *fp2 *fp1; Maillist M N; int nSize = sizeof(*mal2); //fp1 = fopen(""通讯录.txt""rb+""); //fwrite(mal1 nSize 1 fp1); //fwrite(mal2 nSize 1 fp1); //fclose(fp1); fp2 = fopen(""通讯录.txt""rb+""); fread(&M nSize 1 fp2); M.showinfo(); List.push_back(M);}![图片说明](http://img.ask.csdn.net/upload/201605/18/1463538351_419745.png)这样就不能运行
解决方案
解决方案二:
你的第二种方式,前面没有fwrite过的话,通讯录.txt文件里本来就有数据在的?
解决方案三:
fseek找到读写的位置
fread从流中读指定_个数的字符,原型是size_t fread(void ptr size_t size size_t n FILE *stream);参数ptr是保存读取的数据,void的指针可用任何类型的指针来替换,如char*、int 等等来替换;size是每块的字节数;n是读取的块数,如果成功,返回实际读取的块数(不是字节数),本函数一般用于二进制模式打开的文件中_
fwrite 与fread对应,向流中写指定的数据,原型是size_t fwrite(const void *ptr size_t size size_t n FILE *stream);参数ptr是要写入的数据指针,void的指针可用任何类型的指针来替换,如char*、int *等等来替换;size是每块的字节数;n是要写的块数,如果成功,返回实际写入的块数(不是字节数),本函数一般用于二进制模式打开的文件中**
时间: 2024-08-30 06:07:33