getc с Windows против Unix - PullRequest
       0

getc с Windows против Unix

1 голос
/ 07 июля 2011

У меня вопрос по поводу следующего кода:

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' читается только один раз, так что все работает.

Есть идеи?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Является ли файл физически одинаковым, то есть побитовым, на двух платформах? Это вызывает проблемы, так как кодировка окончания строки отличается.

0 голосов
/ 07 июля 2011

попробуйте это:

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 голосов
/ 07 июля 2011

Windows заканчивает строки с \r\n.Может быть, это могло бы помочь:

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

Stangely \r значение равно 13, поэтому я не знаю, что происходит неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...