2011-07-07 38 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