如何使用fgets()函数读取换行符?

时间:2018-12-31 12:32:44

标签: c fgets

我从C联机帮助页了解到,使用fgets()会在EOF或换行符之后停止读取。我有一个程序可以从文件中读取(多行),并在新行的末尾停止读取。

是否有一种方法可以强制fgets()忽略换行符并阅读直到EOF

while(fgets(str,1000, file))
{ 
 // i do stuffs with str here
}

3 个答案:

答案 0 :(得分:1)

  

是否有一种方法可以强制fgets()忽略换行符并读到EOF

不,您不能这样做,因为实现fgets()的方式是如果发生文件结束换行符已找到。也许您可以考虑使用其他文件I / O功能,例如fread()

答案 1 :(得分:1)

在while循环中,您必须进行以下检查:

while ((fgets(line, sizeof (line), file)) != NULL)

成功后,函数将返回相同的str参数。如果遇到文件末尾且未读取任何字符,则str的内容保持不变,并返回空指针。 如果发生错误,则返回空指针。

代码示例:

#include <stdio.h>
int main()
{
    char *filename = "test.txt";
    char line[255];
    FILE *file;
    file = fopen(filename, "r");
    while ((fgets(line, sizeof (line), file)) != NULL) {
        printf("%s", line);
    }
    fclose(file);
    return 0;
}

答案 2 :(得分:0)

否,fgets在遇到\ n(换行符)字符后停止阅读。

否则,您必须自己找到并删除换行符。

Or you can use fread

  

C库函数size_t fread(void * ptr,size_t size,size_t   nmemb,FILE * stream)将给定流中的数据读入数组   由ptr指出。

     

成功读取的元素总数返回为   size_t对象,它是整数数据类型。如果这个数字不同   从nmemb参数开始,则发生错误或结束   已达到文件总数。

/* fread example: read an entire file */
#include <stdio.h>
#include <stdlib.h>

int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;

  pFile = fopen ( "myfile.bin" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // obtain file size:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // allocate memory to contain the whole file:
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // copy the file into the buffer:
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

  /* the whole file is now loaded in the memory buffer. */

  // terminate
  fclose (pFile);
  free (buffer);
  return 0;
}