Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Присвоение одному массиву другого   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.113 c
15-1161020542
55_Ald
2006-10-16 21:42
2006.11.05
Как защитить dll от несанкционированного копирования?


2-1161249445
pkm
2006-10-19 13:17
2006.11.05
Подскажите пожалуйста


15-1160483544
Nic
2006-10-10 16:32
2006.11.05
Олимпиада 1C


15-1160387840
Iamdanil
2006-10-09 13:57
2006.11.05
Задача по математике - помогите!


15-1160782877
ИА
2006-10-14 03:41
2006.11.05
Бесплатный софт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский