![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Присвоение одному массиву другого [D2005, XP]
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);
и работай с ними как твой душе угодно, прибавляй, присваивай...