Форум: "Начинающим";
Текущий архив: 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.055 c