Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

String индексы и VAR параметр   Найти похожие ветки 

 
Hog   (2003-06-10 16:14) [0]

Тут код проходил по нитки где-то...

Там передавалось в Func(var Buf; Var:integer);

вот так

Func(s[1],1) - к примеру.

В хелпах по дельфи для String я нашел

AnsiString, sometimes called the long string, is the preferred type for most purposes.

You can index a string variable just as you would an array. If S is a string variable and i an integer expression, S[i] represents the ith character--or, strictly speaking, the ith byte--in S. For a ShortString or AnsiString, S[i] is of type AnsiChar; for a WideString, S[i] is of type WideChar. For single-byte (Western) locales, MyString[2] := "A"; assigns the value A to the second character of MyString. The following code uses the standard AnsiUpperCase function to convert MyString to uppercase.

var I: Integer;
begin
I := Length(MyString);
while I > 0 do
begin
MyString[I] := AnsiUpperCase(MyString[I]);
I := I - 1;
end;
end;


Be careful indexing strings in this way, since overwriting the end of a string can cause access violations.

Also, avoid passing long-string indexes as var parameters, because this results in inefficient code.

Из последней фразы можно сделать вывод, что передавать S[1] получается неэффективный код?
Или я не понял что-то?


 
VMcL ©   (2003-06-10 17:04) [1]

>Hog (10.06.03 16:14)

Как ты так умудрился скопировать help?
Не AnsiUpperCase, а UpCase.


 
Hog   (2003-06-10 17:13) [2]

У меня именно в хелпе AnsiUpperCase... (Delphi 7)

Я просто вырезку привел, код здесь не самое основное...

Я просил прояснить, то что жирным, внизу


 
Smithson ©   (2003-06-10 17:28) [3]

Видишь ли, строка в Delhpi больше чем строка, это уже почти объект. Ита переменная, которая описана как : String, уже указатель. Поэтому код получается - получить по указателю адрес первого байта и передать этот адрес. Плюс, при такой передаче параметра, библиотечный код не может отследить выход за пределы отведенной строке памяти (в нормальном случае он это отслеживает и увеличивает память при необходиомсти). Вот тебе пояснение.



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

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.037 c
1-84420
Maks Realov
2003-06-09 16:01
2003.06.26
Асинхронное выполнение процедур в своей программе.


3-84001
clickmaker
2003-05-30 14:17
2003.06.26
TClientDataSet.Locate русских строк вызывает AV в kernel32.dll


14-84547
Кен
2003-06-01 06:04
2003.06.26
Как отличить причину от следствия ? Чтобы анализировать события


1-84303
Chainik
2003-06-15 14:02
2003.06.26
OnMouseMove


3-83991
KSergey
2003-05-27 15:27
2003.06.26
Можно ли вставлять комментарии в текст SQL-запроса...