我在确定如何正确格式化fread语句方面遇到了一些麻烦。下面的代码只是我练习的一些随机的东西。基本上它将信息填充到第一个数组中,将's'写入文件,然后将文件读入第二个数组(s2)。但是,我似乎无法以不会产生错误或返回垃圾的方式形成fread语句。数组是char数据类型,因为如果我理解正确,char使用的内存少于其他数据类型。此练习代码的最终应用是用于数据压缩项目。
#include<stdio.h>
#include<string.h>
FILE *fp;
//file pointer
char s[56];
//first string
char s2[56];
//target string for the fread
int n=0;
//counting variable
int m=0;
int main (void)
{
fp=fopen("test.bin", "w+");
//open a file for reading and writing
strcpy(s, "101010001101010");
//input for the string
for(n=0;n<56;n++)
{
if(s[n]==1)
m=n;
else if(s[n]==0)
m=n;
}
printf("%d\n", m);
//the above for loop finds how many elements in 's' are filled with 1's and 0's
for(n=0;n<m;n++)
{
printf("%c", s[n]);
}
//for loop to print 's'
fwrite(s, m, 1, fp);
//writes 's' to the first file
s2=fread(&s2, m, 1, fp);
//an attempt to use fread...
printf("\n\ns2\n\n");
for(n=0;n<m;n++)
{
printf("%c", s2[n]);
}
printf("\n");
//for loop to print 's2'
fclose(fp);
printf("\n\n");
printf("press any number to close program\n");
scanf("%d", &m);
}
答案 0 :(得分:5)
FILE结构在文件中具有隐式搜索位置。你从那个寻找位置读写。如果您想阅读已编写的内容,则需要通过调用fseek()
将搜索位置更改回文件的开头。实际上,对于打开读写的文件,在读写之间切换时必须调用fseek()
。
答案 1 :(得分:1)
fread
函数的返回值是size_t
类型。它是成功读取的元素数量。 (参考:http://www.cplusplus.com/reference/cstdio/fread/)
不要将其分配给s2。只需使用fread(&s2, m, 1, fp);