天天看点

关于使用fgets获取的字符串换行符在windows和linux平台的差异

众所周知,关于换行符,windows创建的文件是\r\n结束的, 而linux这种unix类系统是\n结束的。

虽然知道这一点,不过今天在使用fget函数时,还是掉进了坑里。

废话少说,直接上程序:

/* fgets example */
#include <stdio.h>

int main()
{
   FILE * pFile;
   char mystring [100];

   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     if ( fgets (mystring , 100 , pFile) != NULL )
       puts (mystring);
     fclose (pFile);
   }
   return 0;
}
           

如果myfile.txt中的换行符是\r\n,

那么在windows系统上,fgets获取到的mystring是以\n结束的(坑爹吧

关于使用fgets获取的字符串换行符在windows和linux平台的差异

而在linux系统上,mystring是以\r\n结尾的。

如果想要在windows系统上mystring获取到丢失的\r,换种写法就好了:

pFile = fopen ("myfile.txt" , "rb");
           

最后说明一点:如果myfile.txt中的换行符是\n,则windows和linux上得到的mystring没有差异。

继续阅读