Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FillChar для строки [D7, XP]


Страницы:   1 2 3

Dmitry_177 ©   (2007-05-26 02:25:00) 

Как правильно выполнить FillChar для строки?

Если выполнить так:

var
s: string;
...
FillChar(s, SizeOf(s), #0);

ИМХО очистится не сама строка, а указатель на нее..

Вот так правильно ли будет?

var
s: string;
...
FillChar(PChar(s)^, Length(s), #0);


Loginov Dmitry   (2007-05-26 08:59:00) [41]

> Так будет правильно. Но нарушится механизм подсчета ссылок


Вот он-то как-раз сработает, как и должен. Насколько результат ожидаем - зависит от квалификации того, кто применит данный код.

P.S. А что, константы в консольной проге разве не хранятся в области кода? (Или данные в области кода разрешено модифицировать?)


palva   (2007-05-26 07:57:00) [42]


> Вот так правильно ли будет?
>
> var
> s: string;
> ...
> FillChar(PChar(s)^, Length(s), #0);

Так будет правильно. Но нарушится механизм подсчета ссылок. Пример.
{$APPTYPE CONSOLE}
var
 s1, s2: String;
begin
 s1 := 'qwerty';
 s2 := s1;
 writeln(s2); // 'qwerty'
 FillChar(PChar(s1)^, Length(s1), #0);
 writeln(s2); // выдаст пустую строку
end.

Если вы хорошо понимаете, что произойдет, и ваш текст не будут сопровождать другие программисты, тогда делайте.


Andy BitOff   (2007-05-26 04:19:00) [43]

Да. К сожалению я забыл написать P.S.
Так вот.

Чтобы очистить s:=''; а чтобы заполнить StringOfChar

P.S. Я знаю, что земля не шар.


Kedge   (2007-05-26 03:43:00) [44]

> [6] Andy BitOff ©   (26.05.07 03:14)
> Чтобы очистить s:=''; а чтобы заполнить StringOfChar
Довольно "емкие" операции.
Допустим, я в строку, заранее определенной длины MAX_MY_VALUE_LEN, в цикле записываю значения:
for i := 0 to Count do
begin
 // здесь надо очистить строку, IMHO, лучше использовать FillChar
 SomeFunction(MyStr[1], MAX_MY_VALUE_LEN);
 if Pos('bla-bla', MyStr) > 0 then ....
end;


Andy BitOff   (2007-05-26 03:14:00) [45]

Чтобы очистить s:=''; а чтобы заполнить StringOfChar


Германн   (2007-05-26 02:59:00) [46]


> Dmitry_177   (26.05.07 02:57) [4]
>
> от всякого мусора..
>

Ну а смысл, то в чём?


Dmitry_177   (2007-05-26 02:57:00) [47]

от всякого мусора..


Германн   (2007-05-26 02:51:00) [48]


> Dmitry_177   (26.05.07 02:41) [2]
>
> чтоб очистить ее =)
>

От чего очистить?


Dmitry_177   (2007-05-26 02:41:00) [49]

чтоб очистить ее =)


Германн   (2007-05-26 02:39:00) [50]

А зачем нужен FillChar для строки?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо