2011-07-07 37 views
1

我有個問題關於以下代碼:GETC與Windows VS的Unix

while((c = getc(pFile)) != EOF) 
{ 
    if(c != '\n') 
    { 
     input[index] = (char)c; 
     index++; 
    } else 
    { 
     input[index] = '\0'; 
     index = 0; 
    } 
} 

在Windows中,此C = GETC行讀取 '\ n'(代碼10)的兩倍。例如,我讀取文件與以下兩行:

 
Hello world 
Test 

C = GETC在世界你好讀取,但在讀出圖10(\ n)和10一次,復位輸入數組爲空(因爲'\ 0')。在unix中,'\ n'只讀取一次,所以它一切正常。

有什麼想法?

在此先感謝。

+0

也許它關係到如何文件具有其最終的行信號? – woliveirajr

+0

@ user834005:你如何打開文件? – Hasturkun

+0

pFile = fopen(「input.txt」,「a +」); – ibm1

回答

1

文件在兩個平臺上物理上是否相同,即逐位?這是要求麻煩,因爲線結束的編碼不同。

+0

它應該是相同的文件,雖然我已經用unix模式從ftp到ftp,使用二進制模式(filezilla)...這是問題嗎? – ibm1

0

Windows終止使用\r\n的行。可能這可以幫助:

$ echo test | unix2dos > /tmp/test 
$ hexdump -c /tmp/test 
0000000 t e s t \r \n           
0000006 

Stangely \r值是13,所以我不知道wath是怎麼了。

+0

我剛剛運行todos input.txt,它修改的文件有兩個新行......但是當我在Unix中查看unix文件時,它肯定有1 ... – ibm1

+0

也許你可以檢查空行並忽略它們。 .. – pmg

0

試試這個:

while((c = getc(pFile)) != EOF) 
{ 
    if(c != '\n' && index) 
    { 
     input[index] = (char)c; 
     index++; 
    } 
    else 
    { 
     if (!index) 
       continue; // dumps repeated '\n' 

     input[index] = '\0'; 
     index = 0; 
    } 
} 
+0

不,確定讀入兩個\ n所以它做同樣的事情。在Unix和Windows中查看文件看起來完全一樣......我猜Unix會放兩個\ n的....? – ibm1

+0

我加了一個很髒的,可能不符合任何標準的黑客。也許它適合你。我想我會看看MSDN文檔。 –

+0

明確修復它,謝謝。不過,我認爲問題在於文件本身,當我從unix環境中將其引入到Windows環境中時。無需看看MSDN,謝謝我的欣賞! – ibm1