Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中使用fread时遇到问题_C_String_Fread - Fatal编程技术网

在c中使用fread时遇到问题

在c中使用fread时遇到问题,c,string,fread,C,String,Fread,我在弄清楚如何正确格式化fread语句时遇到了一些麻烦。下面的代码只是我练习的一些随机的东西。基本上,它将信息填充到第一个数组中,将“s”写入文件,然后将文件读入第二个数组(s2)。然而,我似乎无法以一种不给出错误或不返回垃圾的方式来格式化fread语句。数组采用char数据类型,因为如果我的理解正确的话,char使用的内存比其他数据类型少。本实施规程的最终应用是用于数据压缩项目 #include<stdio.h> #include<string.h> FILE *fp

我在弄清楚如何正确格式化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);
}
#包括
#包括
文件*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)进行比较,以确保读操作有效。