2006-05-20

metaclass: (Default)
2006-05-20 05:05 pm

C++

А вот какой смысл в том, что в C++ файлы можно открывать в текстовом и бинарном режимах?

Пока я увидел только то отличие, что в первом режиме "\n", выводимый в файл, подменяется "\r\n" (в винде, во всяком случае)
metaclass: (Default)
2006-05-20 09:51 pm

С++

Уже успел наткнуться на маразматический глюк в 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)))