Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String zu array of char (https://www.delphipraxis.net/18211-string-zu-array-char.html)

MichieruShiro 16. Mär 2004 00:21


String zu array of char
 
Halöle

Hab da ein kleines Problem mit einer Zuweisung.

Delphi-Quellcode:
//So geht es ohne Probleme allerdings muss ich die
//IP direkt angeben.
//Ncb.ncb_callname = array[0..15] of char;
...
begin
  Ncb.ncb_callname := '192.168.001.001 ';
...

//Da aber die IP die ich übergeben will in
//einem String hängt der übergeben wird komme
//ich einfach net weiter.
//-------
//Hier wie ich es gerne machen würde aber es leider
//net geht.
var
  ip : string
begin
  ip := '192.168.001.001 ';
  Ncb.ncb_callname := ip;
Ich hab schon etliche Möglichkeiten, die ich im Forum finden konnte, ausprobiert. Unter anderem...

Delphi-Quellcode:
var
  ip_addr : array[0..15] of char;
begin
  ip_addr[0] := '1';
  ip_addr[1] := '9';
  ip_addr[2] := '2';
  ip_addr[3] := '.';
  ip_addr[4] := '1';
  ip_addr[5] := '6';
  ip_addr[6] := '8';
  ip_addr[7] := '.';
  ip_addr[8] := '0';
  ip_addr[9] := '0';
  ip_addr[10] := '1';
  ip_addr[11] := '.';
  ip_addr[12] := '1';
  ip_addr[13] := '2';
  ip_addr[14] := '3';
  ip_addr[15] := ' ';
  Ncb.ncb_callname := ip_addr;
Dan bekomme ich allerdings die Meldung "Inkompatible Typen" an den kopf geschmissen. Weis eventuel jemand wie man das lösen kann?

MFG
Michieru

dizzy 16. Mär 2004 00:35

Re: String zu array of char
 
Erstmal herzlich wilkommen in der DP!

Du musst explizit casten:
Delphi-Quellcode:
Ncb.ncb_callname := PChar(ip);
(hoffe ich :zwinker:, kann auch sein, dass ich mich grad vertu... probier mal! )


gruss,
dizzy

MichieruShiro 16. Mär 2004 00:55

Re: String zu array of char
 
Hallo dizzy

1.Möglichkeit
Delphi-Quellcode:
var
  ip_addr : array[0..15] of char;
begin
  ip_addr[0] := '1';
  ip_addr[1] := '9';
  ip_addr[2] := '2';
  ip_addr[3] := '.';
  ip_addr[4] := '1';
  ip_addr[5] := '6';
  ip_addr[6] := '8';
  ip_addr[7] := '.';
  ip_addr[8] := '0';
  ip_addr[9] := '0';
  ip_addr[10] := '1';
  ip_addr[11] := '.';
  ip_addr[12] := '0';
  ip_addr[13] := '0';
  ip_addr[14] := '1';
  ip_addr[15] := ' ';
  Ncb.ncb_callname := PChar(ip_addr);
Meldung: Ungültige Typumwandlung

2.Möglichkeit
Delphi-Quellcode:
var
  ip : string;
begin
  ip := '192.168.001.001 ';
  Ncb.ncb_callname := PChar(ip);
Meldung: Inkompatible Typen 'Array' und 'PAnsiChar'

Bin auch noch net so begabt in Delphi... net das ihr durch meine ganzen Code-Schnipsel denkt ich sei ein Profi der ein Probleme hat. Vielmehr ein Anfänger der Probleme hat :wink:

MFG
Michieru

dizzy 16. Mär 2004 01:32

Re: String zu array of char
 
Ist ncb.ncb_callname eine von dir erstellte Variable?

Wenn ja, dann mach es so:
Delphi-Quellcode:
type TIPArray = array[0..14] of Char; // bei 0..14 sind's ja 15 Elemente, und ne ip-Addy ist 15 Zeichen lang
.
.
.
var
  ncb_callname: TIPArray;
  ip         : TIPArray;
.
.
.
// Dann geht auch:
ncb_callname := ip;
Eine andere Variante, die auch gehen könnte:
Delphi-Quellcode:
var
  ncb_callname: string[15]; // 15-Zeichen langer String - ein String ist nicht anderes als ein array of Char!
  ip         : string[15];
.
.
.
// Dann sollte auch gehen:
ncb_callname := ip;
Für Delphi ist ein "array[0..x] of Char" nicht gleich einem anderen "array[0..x] of Char".
Wenn du aber einen eigenen Typ (TIPArray) deklarierst, DANN sind alle Variablen dieses Typs untereinander "zuweisungskompatibel".

Vergiss den Murks in meiner ersten Antwort ;), hoffe dass das hilft!
Aber man müsste jetzt wissen, was das Objekt "ncb" eigentlich ist, und wie die Eigenschaft "ncb_callname" deklariert ist.

n8i,
dizzy

Luckie 16. Mär 2004 01:43

Re: String zu array of char
 
Nimm die Windows API Funktion lstrcpy:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  buffer: array [0..3] of Char;
begin
  s := 'abc';
  lstrcpy(buffer, PChar(s));
  ShowMessage(String(buffer));
end;
Aber wichtig: Der Buffer muss um eins größer sein.

MichieruShiro 16. Mär 2004 07:02

Re: String zu array of char
 
halöle

@dizzy
Öhm ne die Variable "NCB" ist vom Typ "PNCB" aus der Unit NB30.pas von Delphi. Da kann ich die leider net neu zuweisen.

@Luckie
Thx das hat funktioniert. :-D
Da die ip am schluss eine Leerstelle hat habe ich auch meinen 1 Buffer mehr. :thuimb:

Lösung:
Delphi-Quellcode:
...
//NCB.ncb_callname : array[0..15] of Char; von NB30.pas aus Delphi
var
  ip : String;
begin
  ip := '192.168.001.001';
  lstrcpy(Ncb.ncb_callname, PChar(ip));
...
THX an euch beiden.

MFG
Michieru


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz