读书人

自己太菜了问个小疑点

发布时间: 2012-03-29 12:53:12 作者: rapoo

自己太菜了,问个小问题。
问个小问题,程序很简单就是把结构体a,b写入到文件中去,各自写10次,然后再从这个文件中读。
奇怪的是第一次读出来的是正确的:1, 2
后来的9个结构体读出来全是乱数。
怎么回事啊,研究了半天发现时fwrite就没写入正确的数据,我用的有错吗?

FILE *fp = fopen("suo.dat", "wb");

data a = {1, 2};
cout<<fwrite(&a, sizeof(data), 10, fp)<<endl;
fclose(fp);


FILE *fp2 = fopen("suo.dat", "rb");
for (int i = 0; i < 20; i++)
{
data *buffer = (data *)malloc(sizeof(data));
fread(buffer, sizeof(data), 1, fp2);
cout<<buffer->a<<endl;
free(buffer);
}
fclose(fp2);

[解决办法]
for (int n=0;n<10;n++)
cout<<fwrite(&a, sizeof(data), 1, fp)<<endl;
[解决办法]
fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

3.说明

(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

(2)size:要读写的字节数;

(3)count:要进行读写多少个size字节的数据项;

(4)fp:文件型指针。

注意:1 完成次写操(fwrite())作后必须


=======================


data a = {1, 2};
for(int i = 0 ;i< 10;i++)
cout<<fwrite(&a, sizeof(data), 1, fp)<<endl;
fclose(fp);

[解决办法]
10次读完之后要rewind(fp)
不知道c++有这个没,不然文件指针在文件末尾了怎么度
[解决办法]
cout<<fwrite(&a, sizeof(data), 10, fp)<<endl;
-->
cout<<fwrite(&a, sizeof(data), 1, fp)<<endl;
写入的时候也应该是个for循环,写入10次.
[解决办法]

探讨
FILE *fp = fopen("suo.dat", "wb");

data a = {1, 2};
cout<<fwrite(&a…… //这里有错,应该不要cout<< <<endl

[解决办法]
那是写入10 * sizoef(data)个字节吧
[解决办法]
fwrite(&a, sizeof(data), 10, fp);10意思是说有10个连续存放的a,一般是数组。你这里只有一个,所以读内存越界了。
[解决办法]
3l 讲得很明白了……
[解决办法]
MARK
我也在做类似的学习

读书人网 >C语言

热点推荐