繁体   English   中英

getc 与 Windows 与 Unix

[英]getc with 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)两次。 例如,我正在使用以下 2 行读取文件:

Hello world
Test

c = getc 读取 Hello world,但再次读取 10 (\n) 和 10,将输入数组重置为空白(因为 '\0')。 在 unix 中,'\n' 只被读取一次,所以一切正常。

任何想法?

提前致谢。

两个平台上的文件在物理上是否相同,即逐位? 这是自找麻烦,因为行尾的编码不同。

Windows 用\r\n终止行。 这可能会有所帮助:

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

奇怪的\r值是 13,所以我不知道 wath 出了什么问题。

尝试这个:

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM