这个C程序有什么问题,文件读取?

时间:2016-02-16 06:01:42

标签: c file

我正在写一个C程序,其中我必须读取一个大文件到块(每个块16个字符)。为此我写了以下代码。

while(fgets(temp2,16,fp)!=NULL)
{
    printf("\n%d:%s, len = %d", cnt++, temp2, strlen(temp2));
}

但它的阅读只有15个字符。这有什么问题?我该怎么办?

2 个答案:

答案 0 :(得分:5)

  

这有什么问题?

无。它正在做你告诉它的事情。它将读取最多15个字符,除非它遇到换行符或文件结束,然后在最后一个写入之后将该字节空终止。

  

我该怎么办?

阅读reference for fgets,其中说明:

  

char *fgets( char *str, int count, FILE *stream );

     

从给定的文件流中读取最多count - 1个字符,并将它们存储在str中。生成的字符串始终以空值终止。如果文件结束或找到换行符,则解析停止,在这种情况下str将包含该换行符。

您可能想要使用的是fread,而不是fgets,因为您的问题涉及读取字符块而不是换行符分隔的字符串。

答案 1 :(得分:0)

阅读fgets的文档。它正在读

如果您的文件是二进制文件(因此请使用fopen("/path/to/file","rb")打开)并且您关心固定大小的块使用fread