Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
ВнизDelphi 2009 Найти похожие ветки
← →
berrometr (2008-09-26 21:36) [0]начал тестировать, хотел посмотреть что там в буфере будет при юникоде. непонятная закономерность, например при данной строке вылетает acces, проверьте плиз у кого 2009
procedure TForm1.Button1Click(Sender: TObject);
var
b: PChar;
i, len: integer;
s: string;
h: Integer;
begin
s:= "1йцуукqwer111";
len:= system.Length(s);
getMem(b, len);
for i := 0 to len - 1 do b[i]:= s[i+1];
s:="";
for i := 0 to len - 1 do begin
s:= s + b[i]; // <- ошибка на тором проходе Acces
end;
ShowMessage(s);
FreeMem(b);
end;
в чем тут может быть проблема?
при AnsiString PAnsiChar нормально...
← →
Palladin © (2008-09-26 21:44) [1]проблема в том, что сверхразумные существа думают, что в юникоде один символ - один байт.... и сверхразумность их опускается... ну... туда где не светит солнце...
← →
sniknik © (2008-09-26 21:44) [2]> в чем тут может быть проблема?
символ юникод 2 байта, простой 1 , одно и то же количество символов в разных строках = разное количество необходимой памяти под них.
getMem(b, len * 2);
← →
Eraser © (2008-09-26 21:47) [3]> [0] berrometr (26.09.08 21:36)
http://dn.codegear.com/article/38446
http://dn.codegear.com/article/38582
http://dn.codegear.com/article/38703
читать до полного просветления.
← →
berrometr (2008-09-26 22:27) [4]да понятно что два байта...
ну а вот скажите тогда, почему при s:= "йцуукqwer111"; все нормально отрабатывается?
← →
Palladin © (2008-09-26 22:42) [5]мда... там солнце светить еще долго не собирается
← →
berrometr (2008-09-26 22:44) [6]Palladin ©, так может быть все таки скажешь почему исключение в последнем случаи не вылетает?
← →
DVM © (2008-09-26 22:47) [7]
> getMem(b, len * 2);
не так не хорошо, надо Len * SizeOf(Char).
← →
berrometr (2008-09-26 22:50) [8]а ещё лучше Len * StringElementSize(s)
и вообще юникод может быть и 1 байта и более 2..
но я не про это, я про исключение..
← →
Palladin © (2008-09-26 23:07) [9]прокомментируй каждый шаг приведеного кода и укажи где по твоему мнеию бред
← →
berrometr (2008-09-26 23:16) [10]да весь код бред)
тормознул просто, видать короткая строка не затирает память до исключения)
Eraser © , спасибо за ссылки!
← →
Palladin © (2008-09-26 23:22) [11]
> да весь код бред)
:) и все таки свет пробился сквозт щели
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c