Главная страница
    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.04 c
8-1113325455
toshbek
2005-04-12 21:04
2005.08.21
Сохранение midi


1-1123147390
Fanny
2005-08-04 13:23
2005.08.21
type M = (an,it,cr) - надо превратить переменную типа M в string


4-1119721366
Fanny
2005-06-25 21:42
2005.08.21
GetCurrentDirectory глючит :(


1-1122719203
Navi
2005-07-30 14:26
2005.08.21
Текст в 2 строки в TreeNode у TreeView


1-1123093949
deamon_t
2005-08-03 22:32
2005.08.21
Как убрать фокус ввода с MessageBox





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