這個想法來自關於實際問題Replacing multiple new lines in a file with just one的討論。使用在Windows 8.1機器上運行的cygwin終端時發生錯誤。如果(c ==' n')處理跨平臺文件,是否需要編寫「portable」?
末以來的行終止會有所不同,像\n
,\r
,或\r\n
,是否需要寫一個「便攜式」 if(c=='\n')
,使其在Linux,Windows和OS X很好地工作?或者,最佳實踐只是用命令/工具轉換文件?
#include <stdio.h>
int main()
{
FILE * pFile;
int c;
int n = 0;
pFile=fopen ("myfile.txt","r");
if (pFile==NULL) perror ("Error opening file");
else
{
do {
c = fgetc (pFile);
if (c == '\n') n++; // will it work fine under different platform?
} while (c != EOF);
fclose (pFile);
printf ("The file contains %d lines.\n",n);
}
return 0;
}
UPDATE1:
CRT總是轉換行結尾爲 '\ n'?
CRT將始終將行結束符轉換爲''\ n'',因此如果您將文件作爲文本讀取,它將自動移植。除非你想從任何類型的行尾讀取任何平臺的文件 –
@LưuVĩnhPhúc謝謝。如果試圖在Linux下讀取一個文件(在windows上創建),最好的做法是重寫'if(c =='\ n')',或者只是用命令/工具轉換文件? –
@LưuVĩnhPhúc錯誤(一般)。如果文件/流以「ASCII模式」(僅在Microsoft平臺上存在*)打開,則行結束僅在Microsoft平臺上進行翻譯 – joop