Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 19:13   #1
Celestia
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 68
Восклицание Ошибка с SetLength применительно в PChar

Здравствуйте, друзья! Помогите пожалуйста, никак не пойму в чём может быть проблема:

Код:
function TModelContainer.ReadString(Stream: TStream): string;
var I : Integer;
begin
  Stream.Read(I, SizeOf(I));
  SetLength(Result, I);
  Stream.Read(Result[1], I);
end;

function TModelContainer.ReadPChar(Stream : TStream) : PChar;
var R : Integer;
begin
  Stream.Read(R, SizeOf(R));
  SetLength(Result, R);
  Stream.Read(Result[1], R);
end;
первая функция работает на ура, а вторая выдаёт ошибку на строчке SetLength(Result, R);

ошибка такая:

[DCC Error] Unit2.pas(2305): E2197 Constant object cannot be passed as var parameter

Celestia вне форума Ответить с цитированием
Старый 08.04.2011, 19:15   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

В ДНК.

Читать до полного просветления.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 08.04.2011, 20:03   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
В ДНК
Подтверждаю диагноз.
mss вне форума Ответить с цитированием
Старый 08.04.2011, 20:08   #4
Celestia
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 68
По умолчанию

О, как мы невхерственно круты) прям щас заплачу в восторге от вашего остоумия)))

Я спрашивал у АДЕКВАТНЫХ людей а не у вас
Celestia вне форума Ответить с цитированием
Старый 08.04.2011, 21:05   #5
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

PChar это указатель на символ. Он не может изменять свой размер. Он показывает на первый символ, а остальная строка получается поиском символа #0

Пробуй так:
Код:
function TModelContainer.ReadPChar(Stream : TStream) : PChar;
var R : Integer;
begin
  Stream.Read(R, SizeOf(R));
  GetMem(Result, R);
  Stream.Read(Result^, R);
end;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 08.04.2011 в 21:11.
chertovich вне форума Ответить с цитированием
Старый 08.04.2011, 21:31   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Адекватные люди на то и адекватные, что адекватно реагируют на неадекватные вопросы неадекватных людей.

Цитата:
прям щас заплачу
Да, проплачься-просморкайся - и бегом читать справку.
Адекватные ее читают.
mss вне форума Ответить с цитированием
Старый 09.04.2011, 06:42   #7
Celestia
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 68
По умолчанию

mss, это был сарказм, гений ты наш)
Celestia вне форума Ответить с цитированием
Старый 09.04.2011, 06:42   #8
Celestia
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 68
По умолчанию

chertovich большое спасибо))
Celestia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SetLength _-Re@l-_ Общие вопросы Delphi 0 31.08.2010 15:11
Ошибка в setlength(m,x); vedro-compota Общие вопросы Delphi 3 28.06.2010 20:12
SetLength 16*16 Alex Cones Общие вопросы Delphi 13 23.03.2010 15:57
setlength Smerch66 Общие вопросы Delphi 8 22.03.2010 19:32
Access violation на строке вида StrLCopy(PChar(st1),PChar(st2),10); malor Общие вопросы Delphi 1 11.07.2007 13:39