Текущий архив: 2006.11.05;
Скачать: CL | DM;
ВнизПрисвоение одному массиву другого Найти похожие ветки
← →
Dmitry_177 (2006-10-17 14:02) [0]Есть два массива
var
SelfAppFileName: array[0..MAX_PATH] of Char;
AppFileName: array[0..MAX_PATH] of Char;
Как мне присвоить один массив другому? Так не работает: SelfAppFileName := AppFileName;
← →
MsGuns © (2006-10-17 14:06) [1]Читать Кэнту. Быстро !
← →
Palladin © (2006-10-17 14:07) [2]а зачем тебе это в виде массивов? чем обыкновенные строки провинились?
← →
Джо © (2006-10-17 14:08) [3]> Как мне присвоить один массив другому?
Процедура Move.
← →
Dmitry_177 (2006-10-17 14:10) [4]Palladin, учусь на апи программировать, а там во многих функциях так строки вроде как задаются, например в том же
GetModuleFileName(0, AppFileName, SizeOf(AppFileName));
вобщем как мне одному присвоить другой?
← →
Dmitry_177 (2006-10-17 14:14) [5]Так правильно?
Move(AppFileName, SelfAppFileName, SizeOf(AppFileName));
← →
Palladin © (2006-10-17 14:25) [6]Нет, это конечно похвально, только GetModuleFileName принимает в параметрах совсем не массив, а указатель на выделенный буфер и размер этого буффера. так что по хорошему надо
GetModuleFileName(0,@AppFileName[Low(AppFileName)],High(AppFileName)-Low(AppFileName)+1)
← →
Dmitry_177 (2006-10-17 14:25) [7]А если нужно сделать так? Грубо говоря присвоить так:
AppFileName := SelfAppFileName + "Test";
Так будет как-то не очень мне кажется:
Move(AppFileName + "Test", SelfAppFileName, SizeOf(AppFileName + "Test"));
Может лучше в последнем параметре указывать MAX_PATH? Или еще что-то?
← →
Dmitry_177 (2006-10-17 14:33) [8]Move(AppFileName + "Test", SelfAppFileName, SizeOf(AppFileName + "Test")); так даже и не работает...((( Как сделать такое присваивание помогите пожалуйста...
← →
Palladin © (2006-10-17 14:39) [9]Вообще - используй строки и не мучайся.
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);
и работай с ними как твой душе угодно, прибавляй, присваивай...
← →
palva © (2006-10-17 14:41) [10]Можно присваивать и массивы. Только они должны быть одного и того же типа. Читайте учебники по паскалю.
{$APPTYPE CONSOLE}
type
Tm = array [0..1] of char;
var
m1, m2: Tm;
begin
m1 := "qw";
m2 := m1;
WriteLn(m2); // qw
end.
← →
Dmitry_177 (2006-10-17 14:54) [11]В том то и дело что они одного и того же типа array[0..MAX_PATH] of Char;
← →
Ketmar © (2006-10-17 14:58) [12]>[11] Dmitry_177 17-Oct-2006, 14:54
>В том то и дело что они одного и того же типа array[0..
>MAX_PATH] of Char;
это кто тебе опять так наврал? не пробовал таки учебник почитать? это разные типы. почему? умная книжка по паскалю пояснит, ага.
← →
Dmitry_177 (2006-10-17 15:01) [13]type
TMas = array[0..MAX_PATH] of Char
var
SelfAppFileName: TMas;
AppFileName: TMas;
а так одного?
← →
palva © (2006-10-17 15:01) [14]> В том то и дело что они одного и того же типа array[0..MAX_PATH] of Char;
Вы заблуждаетесь.
← →
palva © (2006-10-17 15:04) [15]Dmitry_177 (17.10.06 15:01) [13]
а так одного?
Так - одного. И так тоже:SelfAppFileName, AppFileName: array[0..MAX_PATH] of Char
одного.
← →
Dmitry_177 (2006-10-17 15:11) [16]
type
TMaxPathString = array [0..MAX_PATH] of Char;
var
SysDir: TMaxPathString;
FileName: TMaxPathString;
...
GetSystemDirectory(SysDir, MAX_PATH);
FileName := SysDir + "\test.txt";
А почему так не работает?
← →
Ketmar © (2006-10-17 15:14) [17]>[16] Dmitry_177 17-Oct-2006, 15:11
>А почему так не работает?
а с какого испугу? разве array of char -- это теперь строка?
← →
Dmitry_177 (2006-10-17 15:15) [18]а как тогда сделать такое присваивание?
← →
Ketmar © (2006-10-17 15:16) [19]>[18] Dmitry_177 17-Oct-2006, 15:15
>а как тогда сделать такое присваивание?
барин, ну почитайте литературу, а? это не уровень начинающего. это, пардон, уровень полного чайника. %-(
← →
Dmitry_177 (2006-10-17 15:23) [20]Я понимаю что это глупый вопрос, но я хотел бы знать на него ответ, книги сейчас рядом нету...(((
← →
Ketmar © (2006-10-17 15:26) [21]>[20] Dmitry_177 17-Oct-2006, 15:23
>книги сейчас рядом нету...(((
а интернет зохавал Ктулху...
← →
Dmitry_177 (2006-10-17 15:28) [22]Ну подскажите пожалуйста..
← →
Ketmar © (2006-10-17 15:30) [23]за каким ангелом тебе вообще эти массивы? что, [9] нельзя по религиозным причинам?
← →
palva © (2006-10-17 15:37) [24]
uses SysUtils;
...
GetSystemDirectory(SysDir, MAX_PATH);
strcopy(FileName, SysDir);
strcat(FileName, "\test.txt");
WriteLn(FileName);
← →
Ketmar © (2006-10-17 15:40) [25]>[24] palva(c) 17-Oct-2006, 15:37
тогда массив потребно увеличить. а вдруг путь возмёт, и займёт весь MAX_PATH? %-)
← →
RASkov (2006-10-17 21:53) [26]Правильно говорят работать лучше со строками 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"
← →
RASkov (2006-10-17 21:55) [27]> При присваении 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:58) [28]> Присвоение одному массиву другого
А по вопросу - только поэлементно, Move, Copy.
Страницы: 1 вся ветка
Текущий архив: 2006.11.05;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.043 c