Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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_File Io_Buffer_File Handling - Fatal编程技术网

C fread函数未存储到缓冲区中

C fread函数未存储到缓冲区中,c,file-io,buffer,file-handling,C,File Io,Buffer,File Handling,我使用的fread函数似乎没有将内容存储在缓冲区中。每当我试图打印缓冲区时,都一无所获 如何解决这个问题 #include<stdio.h> #include<stdlib.h> int main(void) { FILE* ptr1 = fopen("try.txt","r"); int count = 0; while(fgetc(ptr1) != EOF) { count++; } char* buffer = ma

我使用的fread函数似乎没有将内容存储在缓冲区中。每当我试图打印缓冲区时,都一无所获

如何解决这个问题

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
   FILE* ptr1 = fopen("try.txt","r");
   int count = 0;
   while(fgetc(ptr1) != EOF)
   {
       count++;
   }
   char* buffer = malloc(sizeof(char)*count);
   fread(buffer,sizeof(char),count, ptr1);
   printf("%s",buffer);
   fclose(ptr1);
   free(buffer);
}
#包括
#包括
内部主(空)
{
文件*ptr1=fopen(“try.txt”、“r”);
整数计数=0;
while(fgetc(ptr1)!=EOF)
{
计数++;
}
char*buffer=malloc(sizeof(char)*计数);
fread(缓冲区,sizeof(char),计数,ptr1);
printf(“%s”,缓冲区);
fclose(ptr1);
自由(缓冲);
}
fgetc()之后使用倒带()函数,该函数将文件位置设置为给定流文件的开头。像

rewind(ptr1);

在计算文件中的字符数时,将fpos指针移动到EOF。 然后,您尝试读取计数的字符数,若不将文件倒带到开头,这是不可能的。
您必须使用倒带。

1。您需要检查
fopen
的返回值以验证它是否成功。2.在
fgetc
循环之后,流位于文件的末尾。您需要将其返回到文件的开头。3.您需要
NUL
终止已读取的数据,因为
fread
不太可能生成字符串。小结:阅读有关您正在调用的函数的文档,欣赏它们提供的返回码,以免陷入违反规则的陷阱。错误检查非常重要的另一个很好的例子。请参阅:如果代码没有存储任何内容,则可能无法读取。因此,要做的第一件事是在
fread()
上进行RTFM,试图找出此调用是否会失败,如果会失败,它将如何将此消息传递回调用方。