Главная страница
    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.059 c
3-1172784728
weer
2007-03-02 00:32
2007.05.20
Как вставить картинку из базы в Access в Delphi


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


11-1159541285
Redline
2006-09-29 18:48
2007.05.20
KolPng


15-1176963350
Pazitron_Brain
2007-04-19 10:15
2007.05.20
Ищется память для ноутбука


15-1176238641
Суслик
2007-04-11 00:57
2007.05.20
И снова хелперы :)





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