Форум: "Начинающим";
Текущий архив: 2011.10.02;
Скачать: [xml.tar.bz2];
ВнизПроверка в множестве Найти похожие ветки
← →
avil (2011-06-12 15:00) [0]win7,d2010
Господа, объясните мне, убогому, ЧЯДНТ? Есть код:function gets(c: char; n: integer; a: array of char): char;
var
l: integer;
begin
result := c;
if CharInSet(c,[a[0]..a[1]]) then
begin
{code}
end;
end;
Каждый символ текста прогоняется через эту функцию. Когда в функцию приходят c = "," и a = ("А","Я") при проверке CharInSet возвращается TRUE. Пробовал менять на классический c in [], и заменял char`ы на ординальные аналоги, но все равно возвращается TRUE. Ординальное значение "," = 44, "A" = 192, "Я" = 223. ПОЧЕМУ?
← →
MBo © (2011-06-12 15:14) [1]В d2010 Char уже не тот...
Стоит почитать статьи по переходу на юникод
← →
avil (2011-06-12 16:45) [2]Действительно, проблема в юникоде, на время сделал ansichar. Спасибо за наводку.
← →
Loginov Dmitry © (2011-06-12 18:32) [3]
> Действительно, проблема в юникоде, на время сделал ansichar.
В множество не должны попадать Unicode-символы. В этой части D2010 недоработана (в том, что не выдает соответствующий Warning, не прерывает компиляцию и самовольно отрезает и выбрасывает старший байт Unicode-символа). Обычно в квадратный скобках идет перечисление символьных констант, а не отдельных элементов массива.
В вашем случае необходимо объявитьa: array of AnsiChar
.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.10.02;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.003 c