1. 程式人生 > >c語言一行一行的讀取txt檔案

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就不會出現這種情況。所以還是建議用第一種方法讀取檔案。