Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1222435595
workbench
2008-09-26 17:26
2008.11.02
Uninstall


2-1222250546
Нов_и_чок
2008-09-24 14:02
2008.11.02
SQL в Delphi


15-1220301375
Пробегал2....
2008-09-02 00:36
2008.11.02
Покупки в интернете


1-1202143624
Сергей
2008-02-04 19:47
2008.11.02
Duplicate resource


2-1222241412
Nick87
2008-09-24 11:30
2008.11.02
SQLзапрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский