Главная страница
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.058 c
2-1178031459
maksimus
2007-05-01 18:57
2007.05.20
ftp


15-1176840318
ArtemESC
2007-04-18 00:05
2007.05.20
Как в Far e делается FTP-соединение?


2-1177419557
bagos
2007-04-24 16:59
2007.05.20
закраска ячеек в гриде


2-1178357756
Marat
2007-05-05 13:35
2007.05.20
Непонятки в QReport


2-1178206705
RomanLN
2007-05-03 19:38
2007.05.20
Возможно ли создать таблицу зарание незная сколько будет полей