在c中使用fread时遇到问题
我在弄清楚如何正确格式化fread语句时遇到了一些麻烦。下面的代码只是我练习的一些随机的东西。基本上,它将信息填充到第一个数组中,将“s”写入文件,然后将文件读入第二个数组(s2)。然而,我似乎无法以一种不给出错误或不返回垃圾的方式来格式化fread语句。数组采用char数据类型,因为如果我的理解正确的话,char使用的内存比其他数据类型少。本实施规程的最终应用是用于数据压缩项目在c中使用fread时遇到问题,c,string,fread,C,String,Fread,我在弄清楚如何正确格式化fread语句时遇到了一些麻烦。下面的代码只是我练习的一些随机的东西。基本上,它将信息填充到第一个数组中,将“s”写入文件,然后将文件读入第二个数组(s2)。然而,我似乎无法以一种不给出错误或不返回垃圾的方式来格式化fread语句。数组采用char数据类型,因为如果我的理解正确的话,char使用的内存比其他数据类型少。本实施规程的最终应用是用于数据压缩项目 #include<stdio.h> #include<string.h> FILE *fp
#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);
}
#包括
#包括
文件*fp;
//文件指针
chars[56];
//第一串
chars2[56];
//fread的目标字符串
int n=0;
//计数变量
int m=0;
内部主(空)
{
fp=fopen(“测试箱”,“w+”);
//打开一个文件进行读写
strcpy(s,“101010001101010”);
//字符串的输入
对于(n=0;n文件结构在文件中有一个隐式的查找位置。您可以从该查找位置进行读取和写入。如果要读取已写入的内容,需要通过调用将查找位置更改回文件的开头。事实上,对于打开以进行读取和写入的文件,必须调用fseek()
在读写之间切换。函数的返回值为size\u t
类型。它是成功读取的元素数。(参考:)
不要将其分配给s2。只需使用fread(&s2,m,1,fp);
首先,在for
循环的第一个中,您将检查字符与整数。如果(s[n]='1'| s[n]='0')m=n;
您的每个“全局”变量都应该在主函数内,请尽量避免使用全局变量(在必要时使用它们,但仅在必要时使用)。使用单个函数时,它们都可以是main()
的本地函数。在使用fp
之前,还应检查fopen()
调用是否成功。尤其应检查fread()
的返回值(但也应检查fwrite)()
)以确保您请求读取或写入的内容实际上是正确的。名义上,您应该检查fclose()
也是;如果您写入的数据太少,以至于在此之前都被缓冲,那么这可能是您唯一一次出现“磁盘空间不足”错误。但是,大多数情况下,您都不会检查这些错误。您应该将注释放在注释的代码之前,或者放在行的末尾,但不要放在下一行。谢谢大家的注释。我很高兴编程新手和所有反馈都非常有用。在写和读之间,如果人们使用循环,这会抓住他们。读/写(或写/读)循环的每次迭代都需要两个定位调用。更重要的是,将结果与预期项目数(1)进行比较,以确保读操作有效。