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

Вниз

что содержит строка после SetLength?   Найти похожие ветки 

 
umbra ©   (2007-04-26 12:33) [0]

если объявить строковую переменную
var
 s: String;

а затем, не присаивая ей значения, выделить для нее память
SetLength(s, MAX_PATH)
то будет ли эта память инициализирована нулями?


 
Reindeer Moss Eater ©   (2007-04-26 12:38) [1]

Это совершенно секретные сведения. Их можно найти только нажав на секретную кнопку F1.


 
umbra ©   (2007-04-26 12:44) [2]

судя по
the content of newly allocated space is undefined
инициализирована не будет. Жаль.


 
DrPass ©   (2007-04-26 12:45) [3]

FillChar может исцелить твою печаль


 
umbra ©   (2007-04-26 12:56) [4]


> FillChar может исцелить твою печаль
>


ага.
На этой строчке
FillChar(PChar(buf), Length(buf), 0);
компилятор гворит
 Constant object cannot be passed as var parameter

А при нажатии на волшебную кнопку F1 можно узнать, что

This error message is reserved.

Я всегда думал, что результат приведения строки к PChar - адрес певого символа строки. Чего ж компилятор ругается?


 
Правильный Вася   (2007-04-26 13:00) [5]

а че такое buf


 
umbra ©   (2007-04-26 13:01) [6]


> а че такое buf


строка


 
Reindeer Moss Eater ©   (2007-04-26 13:03) [7]

>Жаль.

Да нет, не жаль, а как раз зашибись.
А если я длинную строку использую как буфер для передачи в winapi функцию?

var s : string; p : PChar;
begin
s := "мама";
SetLength(s,10);
p := PChar(s) + 4;
ZeroMemory(p,6);
ShowMessage(IntToStr(StrLen(PChar(s))));


 
Reindeer Moss Eater ©   (2007-04-26 13:04) [8]

Я всегда думал, что результат приведения строки к PChar - адрес певого символа строки. Чего ж компилятор ругается?

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


 
begin...end ©   (2007-04-26 13:04) [9]

> umbra ©   (26.04.07 12:56) [4]

> Я всегда думал, что результат приведения строки к PChar
> - адрес певого символа строки.

Так и есть.

> Чего ж компилятор ругается?

Первым параметром FillChar должен быть не адрес, а переменная, начиная с адреса которой требуется заполнить память нужным значением.

FillChar(PChar(S)^, Length(s), 0) или FillChar(S[1], Length(s), 0).


 
umbra ©   (2007-04-26 13:45) [10]

спасибо всем за разъяснения.


 
Loginov Dmitry ©   (2007-04-26 18:04) [11]

Зацените:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 S: string;
begin
 SetLength(S, 100);
 Caption := S;
end;

end.


Несколько неожиданный результат :)
Но точно строка не обнуляется!


 
Джо ©   (2007-04-26 18:12) [12]

> [11] Loginov Dmitry ©   (26.04.07 18:04)
> Несколько неожиданный результат :)

Почему «неожиданный»? Ожидать чего-то конкретного можно только тогда, когда тебе что-то обещают, а когда прямо обещают, что результат будет неожиданный, то и «маємо те, що маємо» :)


 
Leonid Troyanovsky ©   (2007-04-26 19:09) [13]


> umbra ©   (26.04.07 12:33)  

s:= StringOfChar(#0, MAX_PATH)

--
Regards, LVT.



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

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

Наверх





Память: 0.47 MB
Время: 0.047 c
2-1178357756
Marat
2007-05-05 13:35
2007.05.20
Непонятки в QReport


15-1177087371
ArtemESC
2007-04-20 20:42
2007.05.20
И снова PHP...


2-1178172763
тормоз
2007-05-03 10:12
2007.05.20
DBEdit и DateTimePicker


2-1177506224
Abcdef123
2007-04-25 17:03
2007.05.20
Прошу прокомментировать, и дать совет, как сделать лучше


2-1178053453
Riply
2007-05-02 01:04
2007.05.20
Время вызова колбэка FileIOCompletionRoutine





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