Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Работа со строками   Найти похожие ветки 

 
chum   (2005-01-14 21:08) [0]

Есть такая проблемка.
есть переменная S:PChar
далее делаю присваивание
S:="xxxxxxxxxxxxxxxxxxxxxxx";
далее
S[1]:="q" - вот на этом месте приложение вылетает с ошибкой,
самое интересное, что при использовании VCL всё прекрасно работает.
Мне кажется что надо использовать какую-то директиву, но вот какую не пойму. Помогите решить проблему.


 
Ajax ©   (2005-01-14 23:05) [1]

PChar - это указатель на Char. То есть в переменной S ты хранишь адрес первого символа строки. Поэтому мне кажется использовать S[1] крайне сомнительно. Imho нужно либо использовать приведение типов, либо вычислять адрес нужного символа и писать туда.


 
chum   (2005-01-14 23:09) [2]

2Ajax

Ты видимо не внимателmyj прочёл, такое использование не сомнительно, ведь приработе с VCL всё нормально и не возникает никаких ошибок. Видимо в VCL используется какая-то директива.
Да и ещё, если для S выделять память динамически, то и в KOL всё работает.


 
nicesc   (2005-01-15 12:56) [3]

chum
Меня раньше этот вопрос тоже интересовал

if self_ <> nil then
     Result := self_.WndProc( M ) // Падаем тут
  else
  if Assigned( Applet ) then
     Result := Applet.WndProc( M )
  else
     Result := DefWindowProc( W, Msg, wParam, lParam );
{$IFDEF DEBUG_ENDSESSION}

Посмотрел в отладчике, проблема со стэком:
Должно быть после
004037F8  |. 8B45 F8  MOV EAX,[DWORD SS:EBP-8]
004037FB  |. 8B08     MOV ECX,[DWORD DS:EAX]
ECX=0040301C
а на деле в ЕСХ лежит начало строки, то есть 4 байта строки
ЕСХ=65657165 (eeqe)

Дело в том, что полсе присваивания:
s[1]:="q";
delphi вызывает ф-ию, для дополнительной обработки переменной(PChar), народ поясните на кой?


 
RA ©   (2005-01-17 11:05) [4]

Да, у меня проблема с PChar тоже была. Я вроде делал так:
var S:array [0..1023] of char
По-сути дела тот же PChar, но так вроде лучше. И в конце надо будет самому добавлять chr(0). Проблем с присвоением S[1]:="q" не будет.


 
Gleb   (2005-01-17 11:53) [5]

2 RA
Imho, Pchar - указатель, занимает в памяти 4 байта.
Объявление var S:array [0..1023] of char резервирует в памяти 1Кбайт, поэтому, говорить, что это тот же PChar - некорректно.


 
thaddy   (2005-01-17 19:40) [6]

S:String;
Cast it to Pchar, if needed use setlength.



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.031 c
1-1122724239
Antonn
2005-07-30 15:50
2005.08.21
Ресурсы в EXE шнике


1-1123145404
HunTeR_IzV
2005-08-04 12:50
2005.08.21
StringGrid


1-1122649544
Fedor
2005-07-29 19:05
2005.08.21
При нажатии Alt+Tab слышен противный писк Винды


1-1122971216
webpauk
2005-08-02 12:26
2005.08.21
Handle формы


4-1120060152
Alex_Korn
2005-06-29 19:49
2005.08.21
Время создания ключа в реестре





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский