Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String nach Array of Char (https://www.delphipraxis.net/51824-string-nach-array-char.html)

CalganX 19. Aug 2005 16:07


String nach Array of Char
 
Hi,
ich bin gerade dabei ein Plugin für Miranda zu entwickeln (habe es jetzt endlich geschafft, dass ein PopUp angezeigt wird :wall:). Die API gibt mir jetzt aber in einem Record als Eigenschaft ein array[0..2047] of Char.
Ich dachte eigentlich immer, dass ich darauf einfach einen String zuweisen kann und - tada, Compilermagic - ist alles wunderbar.
Aber das ist leider doch nicht so einfach, wie ich dachte. :? Kann mir da mal gerade jemand auf die Sprünge helfen? *g*

Chris

SirThornberry 19. Aug 2005 16:19

Re: String nach Array of Char
 
mit move kannst du einfach den Stringspeicher auf das Array kopieren. Eventuell geht auch StrCopy

Chewie 19. Aug 2005 16:34

Re: String nach Array of Char
 
Das Zuweisen geht wohl nur mit einem Array of Char (also lediglich einem Zeiger).
Bei einem statischen Array muss der ganze Speicherblock aber genau 2048 Byte groß sein, da wirst du den Inhalt des Strings wohl manuell in einen Puffer kopieren müssen.

CalganX 19. Aug 2005 16:43

Re: String nach Array of Char
 
Hi,
mit StrCopy ging es, danke. :)

Chris

r_kerber 19. Aug 2005 16:58

Re: String nach Array of Char
 
Zitat:

Zitat von Chakotay1308
mit StrCopy ging es, danke. :)

Obwohl IMHO StrPCopy die richtige Lösung wäre für das Kopieren eine Pascal-Srtings in einen C-String.

CalganX 19. Aug 2005 17:05

Re: String nach Array of Char
 
Hi Rainer,
du hast bedingt Recht. Ich habe gerade nachgeguckt, eigentlich verwende ich sogar die Funktion lstrcpy aus der Unit Windows. ;)

Chris

r_kerber 19. Aug 2005 17:39

Re: String nach Array of Char
 
Zitat:

Zitat von Chakotay1308
Ich habe gerade nachgeguckt, eigentlich verwende ich sogar die Funktion lstrcpy aus der Unit Windows. ;)

Aber auch das ist nur eine Funktion die einen C-String in einen anderen kopiert. Wenn Du aber einen Pascal-String in einen C-String kopieren willst, dann verwendest Du StrPCopy. Das P steht eben für Pascal. Diese Prozedur gibt es, weil sich die beiden String-Arten in ihrer internen Darstellung unterscheiden. Das Gegenstück ist übrigens die Funktion StrPas. Wenn Du allerdings von vornherein mit C-Strings (Array of Char, PChar, ...) arbeitest, dann ist StrCopy natürlich die richtige Wahl.

CalganX 19. Aug 2005 18:26

Re: String nach Array of Char
 
Hi,
also irgendwie ist das doch noch nicht das Wahre. :gruebel:
So sieht's im Moment aus:
Delphi-Quellcode:
  stemp := Format('Now playing: %s - %s', [sArtist, sTrack]);
  ppd.lpszText := StrPCopy(@(ppd.lpszText), stemp);
Doch da gibts den Fehler
Fehlermeldung:
[Fehler] iTunesNotify.dpr(85): E2010 Inkompatible Typen: 'Array' und 'PAnsiChar'

Das Schlimme ist, dass es vorhin irgendwie mal funktioniert hat. :wall:

@Rainer: okay, dann war lstrcpy die falsche Wahl, weil ich ja (s.o.) eindeutig einen Delphi-String in ein Array bekommen will.

Da das Array jedoch statisch ist, befürchte ich, dass mir nichts anderes übrig bleibt, als das, was Martin vorgeschlagen hat. :? Sehe ich das richtig?

Chris

brechi 19. Aug 2005 18:47

Re: String nach Array of Char
 
es ist schon ein unterschied ob du asu einem array of char nen string machen willst oder aus einem string en narray of char

du vermischt ja bei dir beides

Delphi-Quellcode:
var s: String;
a: array[0..1213] of char;

begin
  SetLength(s,sizeof(a));
  copymemory(@s[1],@a[low(a)],sizeof(a));

  // array nach string

  copymemory(@a[low(a)],@s[1],sizeof(a));
  // von string nach array

end;

CalganX 19. Aug 2005 19:09

Re: String nach Array of Char
 
Hi,
juchu. :thumb:
Das scheint jetzt zu funktionieren, danke dir! :)

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.

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