Konwertowanie Stringa na Array Of Char

0

Oto problem:
jest zadeklarowany rekord:
TLink = record
NazwaLinka: Array [0..MAX_PATH] Of Char
itp, itd...
end;
Var Link: TLink;

następnie probuje przypisac zmienną :
Var CT: Array [0..MAX_PATH] Of Char;

czyli za Link.NazwaLinka := CT

Moje pytanie brzmi:
dlaczego delphi wyrzuca mi błąd Incompatible types??????

0

Moje pytanie brzmi:
dlaczego delphi wyrzuca mi błąd Incompatible types??????

Bo typy są niekompatybilne.

0

zamiast array[] of char daj PChar - do operacji na pchar masz specjalne funkcje.

0

Ze informuje mnie o niezgodnych typach to wiem, pyatam dlaczgo??
Dlaczego skoro typy danych są identyczne.
dlaczego podstawiajac:
Link.NazwaLinka := 'Sciezka dp pliku.lnk'
nie ma błędu
a podstawiając zmienną zawierającą ten sma tekst wyrzyca błąd niezgodności typów danych??
Jak rozwiązać ten problem.

0
Var a,b: Array [0..MAX_PATH] Of Char;
begin
  move(a,b,MAX_PATH+1);
end;

// do postu ponizej... to nie jest błąd języka, a tylko jego specyfika... Dlatego poinizszego przykłądu nie da sie skompilować:

procedure a(b:array[1..10]of byte);
begin
end;

Dlatego też trzeba okreslic dodatkowy typ... i to juz pójdzie:

type c=array[1..10]of byte;

procedure a(b:c);
begin
end;

Dlatego też jesli obie zmienne są zadeklarowane w jednej linijce (niepodważalnie mają ten sam typ) to da sie skompilować.

// niezaleznie od odmiany t.p. tez tak miał
// sam zapomniałem o tej właściwości .. wiec move... w sumie jest rownie dobre

0

Hmm problem jest rzeczywiście podejrzany...
Wyglada to na jakiś bezsensowny błąd debuggera Delphi. Jeżeli deklarację napiszę tak:

var
  X: array [0..6] of Char; 
  Y: array [0..6] of Char;
begin
  X := Y;
end;
  • wyskakuje "incompatibile types". Ale jeżeli zmienię deklaracje na teoretycznie równoważną:
var
  X, Y: array [0..6] of Char;
begin
  X := Y;
end;
  • wszystko jest ok [???] .

Można ominąc to przez utworzenie nowego typu zmiennej:

type
  TArray = Array [0..MAX_PATH] Of Char;
  TLink = record
    NazwaLinka: TArray;
  end;

//...

var
  Link : TLink;
  X : TArray;
begin
  Link.NazwaLinka := X;
end;

[do postu poniżej]
Heh, to tylko podpis, nie bierz tego do siebie :)

0

i tu się z tobą zgodzę gdyby nie net starałbym sie sam rozwiązać problem.
I TO ZROBIŁEM.
Dla każdego zainteresowanego podaje rozwiązanie:

Var Nazwa: String;

For I := 0 To Pred(Length(Nazwa)) Do
Link.NazwaLinku[I] := Nazwa[I + 1]

Wszystko działa wyśmienicie.
Dzięki za podpowiedzi.

0

Oj, to chyba niezbyt dobre rozwiązanie. Mniej czasu zajmie kopiowanie kawałka pamięci, niż wykonanie pętli (chyba). no, chyba że to gdzieś, gdzie nie liczy się szybkość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1