c语言一行一行的读取txt文件

工作中做的项目,经常需要读取一些脚本,就是一些txt文件,用python读取很简单,但是我们很多工具也是用c/c++语言写的,用c的话读取文件我一般是按照如下的方式:

while(fscanf(pFile,"%[^\n]",CmdLine)!=EOF)

fgetc(pFile);
...
}

其中,pFile是调用fopen函数返回的文件句柄,cmdline是定义的char型数组,用来存储一行的内容。此code运用了fscanf的方式,一行一行的读取txt文件,在while中做处理。其中的%[^\n]属于正则表达式,代表不遇到换行符就一直读下去,直到遇到换行符\n,fscanf函数就退出。退出后进入while,执行fgetc函数,读取一个字符,文件句柄向后移动一个字符,相当于跳过了\n换行符,下一次就从下一行开始读了。

也有用下面的方法读取的:

while(fscanf(pFile,"%[^\n]%*c\n",CmdLine)!=EOF)
{
...
}

相当于将fgetc函数移除,改为正则表达式中%*c的方式跳过\n换行字符。但是我在工作中发现这种方法有一个问题,那就是遇到第一行是空的,从第二行才开始有内容的文件的时候,程序会一直停在第一行无限循环下去,CmdLine中什么也读不到。我觉得貌似是fscanf中使用正则表达式的bug,毕竟正则表达式的支持还是shell或python这种脚本语言比较好。用fgetc就不会出现这种情况。所以还是建议用第一种方法读取文件。

你可能感兴趣的:(c语言,IO操作)