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

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

Присвоение одному массиву другого [D2005, XP]


Страницы:   1 2

Dmitry_177 ©   (2006-10-17 14:02:00) 

Есть два массива

var
SelfAppFileName: array[0..MAX_PATH] of Char;
AppFileName: array[0..MAX_PATH] of Char;

Как мне присвоить один массив другому? Так не работает: SelfAppFileName := AppFileName;


RASkov   (2006-10-17 21:58:00) [1]

> Присвоение одному массиву другого

А по вопросу - только поэлементно, Move, Copy.


RASkov   (2006-10-17 21:55:00) [2]

> При присваении m2:=m1 создается "псевдоним" на первый массив
> и далее при m2:='qw' то и m1 тоже станет равен 'qw'

Т.е. хотел сказать так:
{$APPTYPE CONSOLE}
type
Tm = array [0..1] of char;
var
m1, m2: Tm;
begin
m1 := 'qw';
m2 := m1;
WriteLn(m2); // qw
m2 := 'NewValue';
WriteLn(m1); // NewValue
end.


RASkov   (2006-10-17 21:53:00) [3]

Правильно говорят работать лучше со строками String, а если необходимо передать параметром в API то - PChar(s);
Т.е. можно так

Var
s:String;
SetLength(s,MAX_PATH);
n:=GetModuleFileName(0, PChar(s), Length(s));


и насчет типов
при таком обявлении создается два разныхтипа:
type
 arrstr1 [0..MAXPATH] of char;
 arrstr2 [0..MAXPATH] of char;


А в таком случае:

{$APPTYPE CONSOLE}
type
Tm = array [0..1] of char;
var
m1, m2: Tm;
begin
m1 := 'qw';
m2 := m1;
WriteLn(m2); // qw
end.

При присваении m2:=m1 создается "псевдоним" на первый массив и далее при m2:='qw' то и m1 тоже станет равен 'qw'


Ketmar   (2006-10-17 15:40:00) [4]

>[24] palva(c) 17-Oct-2006, 15:37
тогда массив потребно увеличить. а вдруг путь возмёт, и займёт весь MAX_PATH? %-)


palva   (2006-10-17 15:37:00) [5]


uses SysUtils;

...

GetSystemDirectory(SysDir, MAX_PATH);
strcopy(FileName, SysDir);
strcat(FileName, '\test.txt');
WriteLn(FileName);


Ketmar   (2006-10-17 15:30:00) [6]

за каким ангелом тебе вообще эти массивы? что, [9] нельзя по религиозным причинам?


Dmitry_177   (2006-10-17 15:28:00) [7]

Ну подскажите пожалуйста..


Ketmar   (2006-10-17 15:26:00) [8]

>[20] Dmitry_177 17-Oct-2006, 15:23
>книги сейчас рядом нету...(((
а интернет зохавал Ктулху...


Dmitry_177   (2006-10-17 15:23:00) [9]

Я понимаю что это глупый вопрос, но я хотел бы знать на него ответ, книги сейчас рядом нету...(((


Ketmar   (2006-10-17 15:16:00) [10]

>[18] Dmitry_177 17-Oct-2006, 15:15
>а как тогда сделать такое присваивание?
барин, ну почитайте литературу, а? это не уровень начинающего. это, пардон, уровень полного чайника. %-(


Dmitry_177   (2006-10-17 15:15:00) [11]

а как тогда сделать такое присваивание?


Ketmar   (2006-10-17 15:14:00) [12]

>[16] Dmitry_177 17-Oct-2006, 15:11
>А почему так не работает?
а с какого испугу? разве array of char -- это теперь строка?


Dmitry_177   (2006-10-17 15:11:00) [13]


type
 TMaxPathString =  array [0..MAX_PATH] of Char;

var
 SysDir: TMaxPathString;
 FileName: TMaxPathString;

...
 GetSystemDirectory(SysDir, MAX_PATH);
 FileName := SysDir + '\test.txt';

А почему так не работает?


palva   (2006-10-17 15:04:00) [14]

Dmitry_177   (17.10.06 15:01) [13]
а так одного?


Так - одного. И так тоже:
SelfAppFileName, AppFileName:  array[0..MAX_PATH] of Char
одного.


palva   (2006-10-17 15:01:00) [15]

> В том то и дело что они одного и того же типа array[0..MAX_PATH] of Char;

Вы заблуждаетесь.


Dmitry_177   (2006-10-17 15:01:00) [16]

type
TMas = array[0..MAX_PATH] of Char

var
SelfAppFileName: TMas;
AppFileName: TMas;

а так одного?


Ketmar   (2006-10-17 14:58:00) [17]

>[11] Dmitry_177 17-Oct-2006, 14:54
>В том то и дело что они одного и того же типа array[0..
>MAX_PATH] of Char;
это кто тебе опять так наврал? не пробовал таки учебник почитать? это разныетипы. почему? умная книжка по паскалю пояснит, ага.


Dmitry_177   (2006-10-17 14:54:00) [18]

В том то и дело что они одного и того же типа array[0..MAX_PATH] of Char;


palva   (2006-10-17 14:41:00) [19]

Можно присваивать и массивы. Только они должны быть одного и того же типа. Читайте учебники по паскалю.
{$APPTYPE CONSOLE}
type
 Tm = array [0..1] of char;
var
 m1, m2: Tm;
begin
 m1 := 'qw';
 m2 := m1;
 WriteLn(m2); // qw
end.


Palladin   (2006-10-17 14:39:00) [20]

Вообще - используй строки и не мучайся.


Var
s:String;
n:Cardinal;

SetLength(s,MAX_PATH);
n:=GetModuleFileName(0,@s[1],Length(s));
If n=0 Then Raise Exception.Create('ошибка какато');
SetLength(s,n);



и работай с ними как твой душе угодно, прибавляй, присваивай...


Страницы:   1 2

Наверх

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