С++

May. 20th, 2006 09:51 pm
metaclass: (Default)
[personal profile] metaclass
Уже успел наткнуться на маразматический глюк в 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)))

Date: 2006-05-20 07:33 pm (UTC)
From: [identity profile] kkirsanov.livejournal.com
Что с юникодом в настроках проекта?

Date: 2006-05-20 07:52 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Шоб я знал :) Тут и проекта то нету - один файл, компилируемый консольным компилятором.
Надо глянуть в ключи компилятора, видимо.

Profile

metaclass: (Default)
metaclass

April 2017

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

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 12th, 2025 07:14 am
Powered by Dreamwidth Studios