May. 20th, 2006

C++

May. 20th, 2006 05:05 pm
metaclass: (Default)
А вот какой смысл в том, что в C++ файлы можно открывать в текстовом и бинарном режимах?

Пока я увидел только то отличие, что в первом режиме "\n", выводимый в файл, подменяется "\r\n" (в винде, во всяком случае)

С++

May. 20th, 2006 09:51 pm
metaclass: (Default)
Уже успел наткнуться на маразматический глюк в isspace.

У Страуструпа есть такой пример функции для пропускания whitespace в входном потоке:
char c;
while(f.get(c)) {
if(!isspace(c))
{
f.putback(c);
break;
}
}

Так вот если эту хрень откомпилировать c debug версией MSVC библиотек, и подать на вход файл с русскими буквами, она аккуратно сваливается в assert. Потому что signed char для русских букв - это отрицательное значение, и преобразуется оно в отрицательное int, которое внутри isspace проверяется на попадание в диапазон 0x00-0xFF. Не попадает и сваливается в assert.

пока обошел аццкой комбинацией преобразований типов if(!isspace(((unsigned char)c)))

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 9th, 2025 12:12 pm
Powered by Dreamwidth Studios