странное поведение кота - PullRequest
       4

странное поведение кота

5 голосов
/ 11 августа 2011

Я скомпилировал в Ubuntu программу, которая была разработана для (и работает на) Windows. В Ubuntu я вижу этот код:

string s = values_[9];
cout << s << endl;
cout << s << "x\n";

производит этот вывод:

high
xigh

Ожидаемый результат для второй строки - "highx". Я знаю, что значение values_ [9] изначально читается из файла (написанного в Windows). Печать других строк, кажется, работает нормально.

Что здесь происходит?

Ответы [ 3 ]

8 голосов
/ 11 августа 2011

Запустите команду с выводом через cat -A. Возможно, либо значение s, либо вывод, полученный с помощью endl, дает вам символ '\r', который обычно отправляет курсор назад в начало строки.

РЕДАКТИРОВАТЬ: При дальнейшем рассмотрении, паразитные '\r' почти наверняка в s, а не в выводе, производимом endl. Я думал, что могут происходить какие-то забавные локали, но наличие s, равное "high\r", объясняет симптомы.

EDIT2: если в вашей системе нет cat -A (это расширение GNU), попробуйте cat -v или, если вы в отчаянии, od -c.

4 голосов
/ 11 августа 2011

Строка, которую вы печатаете, содержит возврат каретки '\r'.Происходит то, что вы печатаете high, а затем возврат каретки, который возвращает курсор в начало строки.Затем, когда вы печатаете x, она перезаписывает первую букву в строке.

Вы должны либо удалить возврат каретки из исходного файла (например, с помощью dos2unix(1) или многих другихдругие параметры), или измените код, чтобы убрать возврат каретки после прочтения файла.

3 голосов
/ 11 августа 2011

Что, вероятно, происходит, так это то, что в values_[9] есть \r.

...