про int isalpha(int c) & Co.
От: c-smile Канада http://terrainformatica.com
Дата: 05.09.09 18:28
Оценка:
Вот эта функция безобидная функция:
#include <ctype.h>
int isalpha(int c);


вызывает AV при значениях c > 257 во всех msvcrt...dll которые актуальны на сегодняшний день.

Это (AV) правильно вообще? Или это такой дизайн?
Re: про int isalpha(int c) & Co.
От: Юрий Жмеренецкий ICQ 380412032
Дата: 05.09.09 19:30
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Вот эта функция безобидная функция:

CS>
CS>#include <ctype.h>
CS>int isalpha(int c);
CS>


CS>вызывает AV при значениях c > 257 во всех msvcrt...dll которые актуальны на сегодняшний день.


CS>Это (AV) правильно вообще? Или это такой дизайн?


Дизайн -> UB -> AV

ISO/IEC 9899:1999:

7.4/1
The header <ctype.h> declares several functions useful for classifying and mapping characters. In all cases the argument is an int, the value of which shall be representable as an unsigned char or shall equal the value of the macro EOF. If the argument has any other value, the behavior is undefined.

Re: про int isalpha(int c) & Co.
От: Шахтер Интернет  
Дата: 05.09.09 19:54
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Вот эта функция безобидная функция:

CS>
CS>#include <ctype.h>
CS>int isalpha(int c);
CS>


CS>вызывает AV при значениях c > 257 во всех msvcrt...dll которые актуальны на сегодняшний день.


CS>Это (AV) правильно вообще? Или это такой дизайн?


Правильно. Для этой функции аргумент должен быть в пределах [-1,255]. Не пользуйся стандартной библиотекой.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[2]: про int isalpha(int c) & Co.
От: c-smile Канада http://terrainformatica.com
Дата: 05.09.09 22:55
Оценка: :)
Здравствуйте, Шахтер, Вы писали:

Ш>Здравствуйте, c-smile, Вы писали:


CS>>Вот эта функция безобидная функция:

CS>>
CS>>#include <ctype.h>
CS>>int isalpha(int c);
CS>>


CS>>вызывает AV при значениях c > 257 во всех msvcrt...dll которые актуальны на сегодняшний день.


CS>>Это (AV) правильно вообще? Или это такой дизайн?


Ш>Правильно. Для этой функции аргумент должен быть в пределах [-1,255]. Не пользуйся стандартной библиотекой.


Да блин я скоро TerraInformatica переименую в BikeShop, а то у меня уже этих лисапетов накопилось...
Не ну есть в этом мире чё-нить на шо можно сесть и уже таки поехать?
Re[3]: про int isalpha(int c) & Co.
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 06.09.09 00:13
Оценка: :))
Здравствуйте, c-smile, Вы писали:
CS>Не ну есть в этом мире чё-нить на шо можно сесть и уже таки поехать?
boost
:)
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Re[4]: про int isalpha(int c) & Co.
От: c-smile Канада http://terrainformatica.com
Дата: 06.09.09 03:02
Оценка:
Здравствуйте, Rakafon, Вы писали:

R>Здравствуйте, c-smile, Вы писали:

CS>>Не ну есть в этом мире чё-нить на шо можно сесть и уже таки поехать?
R>boost
R>

В свое время на ЕС ЭВМ была такая многопользовательская система по имени Primus. При загрузке на экране появлялась цитата:

Только примус штука предательски ненадежная. Вероятность его разгорания носит лотерейный характер. Порою он не горит оттого, что откровенно ломается, а порою не работает, потому что вдруг не работает...
(В.Шатаев. “Категория трудности”)


Ну дык это по-моему про сборку boost. Т.е. если соберется то поедем. А нет — так не судьба.
Ну а после того как мы собрали оный с помощью идущего в комплекте зубила и взгромоздившись на этот мега-лисапед мы
все из себя такие счастливые можем задаться вопросом: "ух и круто! только где тут в этом всем великолепии нужная нам isalpha()?"
Re[2]: про int isalpha(int c) & Co.
От: Feonyf  
Дата: 06.09.09 05:02
Оценка: :)
Здравствуйте, Шахтер, Вы писали:

Ш> Не пользуйся стандартной библиотекой.


У windows есть IsCharAlpha
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
Re: про int isalpha(int c) & Co.
От: byleas  
Дата: 06.09.09 22:12
Оценка: +2
Здравствуйте, c-smile, Вы писали:

Там таблицы просто. Конечно, внутри можно было бы и проверять выход за пределы диапазона, но можно ведь и на пользователя CRT возложить это
Re[5]: про int isalpha(int c) & Co.
От: jazzer Россия Skype: enerjazzer
Дата: 07.09.09 05:05
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Ну дык это по-моему про сборку boost. Т.е. если соберется то поедем. А нет — так не судьба.

CS>Ну а после того как мы собрали оный с помощью идущего в комплекте зубила и взгромоздившись на этот мега-лисапед мы
CS>все из себя такие счастливые можем задаться вопросом: "ух и круто! только где тут в этом всем великолепии нужная нам isalpha()?"

Вообще-то абсолютное большинство бустовских библиотек — header-only, так что ничего собирать не надо, собирать нужно от силы 5-10 библиотек.
Опять же, если нужна стандартная сборка для винды, возьми инсталлятор отсюда и не парься, все уже будет собрано:
http://www.boostpro.com/download
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: про int isalpha(int c) & Co.
От: igna Россия  
Дата: 07.09.09 06:06
Оценка: +1
Здравствуйте, Шахтер, Вы писали:

Ш>Правильно. Для этой функции аргумент должен быть в пределах [-1,255]. Не пользуйся стандартной библиотекой.


Справедливости ради стоит заметить, что это ограничение касается стандартной библиотеки языка C. В стандартной библиотеке языка C++ есть шаблон функции template <class charT> bool isalpha (charT c, const locale& loc);, который этим ограничением не страдает.
Re[4]: про int isalpha(int c) & Co.
От: igna Россия  
Дата: 07.09.09 06:09
Оценка: +1
Здравствуйте, Rakafon, Вы писали:

R>boost


В данном случае достаточно стандартной библиотеки C++.
Re[3]: про int isalpha(int c) & Co.
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 07.09.09 07:07
Оценка:
Здравствуйте, Feonyf, Вы писали:
F>У windows есть IsCharAlpha

... зачем советуете MS-Specific, уважаемый? Ведь c-smile необходимо HTMLayout ещё и на другие платформы портировать и поддерживать. И для него удобнее будет работать сразу с кроссплатформенными инструментами, а не городить кучу своих обёрток, абстрагирующих от платформы, над вызовами типа IsCharAlpha. Как справедливо заметил(а) igna в библиотеке С++ есть для этого безопасное средство
Автор: igna
Дата: 07.09.09
, в отличие от небезопасной функции
Автор: c-smile
Дата: 05.09.09
библиотеки языка С.
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
isalpha
Re[5]: про int isalpha(int c) & Co.
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 07.09.09 07:25
Оценка:
Здравствуйте, c-smile, Вы писали:
CS>все из себя такие счастливые можем задаться вопросом: "ух и круто! только где тут в этом всем великолепии нужная нам isalpha()?"
Да я пошутил насчёт boost'а
:)
... стёб-с

CS>Ну дык это по-моему про сборку boost. Т.е. если соберется то поедем. А нет — так не судьба.

... ну это вы, видимо, очень плохо знакомы с boost: собирается без проблем, не требуя молитв богу Ассемблера и вмешательств шамана с бубнами, и ездить на этом мото-вело-парке — одно удовольствие, причём на абстрагируясь от платформы, что немаловажно.
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
boost build
Re: про int isalpha(int c) & Co.
От: Кодт Россия  
Дата: 07.09.09 11:20
Оценка: :)
Здравствуйте, c-smile, Вы писали:

Так сказать, фильм ужасов IsAlpha returns!
Автор: Снорк
Дата: 03.10.02
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[6]: про int isalpha(int c) & Co.
От: midcyber
Дата: 08.09.09 13:39
Оценка:
Здравствуйте, Rakafon, Вы писали:

R>... ну это вы, видимо, очень плохо знакомы с boost: собирается без проблем, не требуя молитв богу Ассемблера и вмешательств шамана с бубнами


То-то я неделю boost::thread под WinCE собирал, перекопав весь инет :)))
Re[6]: про int isalpha(int c) & Co.
От: zaufi Земля  
Дата: 08.09.09 19:47
Оценка: :)
yf Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, c-smile, Вы писали:


CS>>Ну дык это по-моему про сборку boost. Т.е. если соберется то поедем. А нет — так не судьба.

CS>>Ну а после того как мы собрали оный с помощью идущего в комплекте зубила и взгромоздившись на этот мега-лисапед мы
CS>>все из себя такие счастливые можем задаться вопросом: "ух и круто! только где тут в этом всем великолепии нужная нам isalpha()?"

J>Вообще-то абсолютное большинство бустовских библиотек — header-only, так что ничего собирать не надо, собирать нужно от силы 5-10 библиотек.

J>Опять же, если нужна стандартная сборка для винды, возьми инсталлятор отсюда и не парься, все уже будет собрано:
J>http://www.boostpro.com/download

может и мне подскажешь где бы инсталлятор буста взять для LynxOS 4.0 (на котором gcc 2.95.3)
Re[7]: про int isalpha(int c) & Co.
От: jazzer Россия Skype: enerjazzer
Дата: 08.09.09 21:58
Оценка: :)
Здравствуйте, zaufi, Вы писали:

Z>может и мне подскажешь где бы инсталлятор буста взять для LynxOS 4.0 (на котором gcc 2.95.3)


Привет археологам
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.