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

Вниз

что содержит строка после 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
2-1177022043
Германн
2007-04-20 02:34
2007.05.20
Непонятки с OnResize


1-1174906870
tytus
2007-03-26 15:01
2007.05.20
Как нормально заставить работать CM_MOUSELEAVE


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


15-1176874493
homm
2007-04-18 09:34
2007.05.20
Кодировка: PHP MySQL


1-1174589370
Кто ответит на вопрос?:)
2007-03-22 21:49
2007.05.20
Управление Excel-ем