Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Pchar (https://www.delphipraxis.net/33491-problem-mit-pchar.html)

egal 8. Nov 2004 09:58


Problem mit Pchar
 
Ich habe ein Problem, wenn ich so schreibe:
Delphi-Quellcode:
p := pchar('2');
oder so:
Delphi-Quellcode:
 p := pchar('a');
bleibt in diesen Fällen meine Pcar-Variable p ganz leer, aber warum, verstehe ich nicht so ganz oder muss unbedingt mein string mindestens zweistellig sein?

HeZa 8. Nov 2004 12:26

Re: Problem mit Pchar
 
Hi,

Zitat:

Zitat von egal
Ich habe ein Problem, wenn ich so schreibe:
Delphi-Quellcode:
p := pchar('2');
oder so:
Delphi-Quellcode:
 p := pchar('a');
bleibt in diesen Fällen meine Pcar-Variable p ganz leer, aber warum, verstehe ich nicht so ganz oder muss unbedingt mein string mindestens zweistellig sein?

Nein die String-Konstante muß nicht zweistellig sein. Nach deiner Zuweisung solle p auf eine Zeichenkette der Form '2'#0 bzw 'a'#0 zeigen. Wie prüfst du denn den Inhalt von p? Zeig mal etwas Code.

Ciao HeZa

Dax 8. Nov 2004 13:02

Re: Problem mit Pchar
 
Wenn du einer PChar-Variable direkt eine Konstante zuweist, brauchst du dieses Typecasting nicht.

egal 8. Nov 2004 13:35

Re: Problem mit Pchar
 
So, hier ist bisschen Code
Delphi-Quellcode:
var p :pChar; chBsp : array of PChar;
    for i := 1 to 10 do begin
      p := pchar('2');
      Setlength(chBsp, length(chBsp) +1);
      chBsp[High(chBsp)] := p;
    end;
Wenn es einstellig ist, wird in meinem array nichts gespeichert, bekomme so ein Ergebnis:
100, text, , test.
Wo Leerzeichen ist, muss eigentlich 2 stehen.
Aber egal, wenn ich statt "2" eine Variable verwende, z.B.
Delphi-Quellcode:
cStr := '2'; p := pchar(cStr);
dann funktioniert alles problemlos. Ich benutze da sowieso Variablen, nur für den Beispiel habe ich Constante genommen und hab plötzlich so was bekommen. Merkwürdig. :-D

HeZa 8. Nov 2004 16:04

Re: Problem mit Pchar
 
Zitat:

Zitat von egal
Wenn es einstellig ist, wird in meinem array nichts gespeichert, bekomme so ein Ergebnis:
100, text, , test.

Mit deinem Beispiel hast du diesen Text aber nicht erzeugt oder? Insbesondere würde mich interessieren wo und wie du dieses chBsp Array ausgibst?

Zitat:

Zitat von egal
Aber egal, wenn ich statt "2" eine Variable verwende, z.B.
Delphi-Quellcode:
cStr := '2'; p := pchar(cStr);
dann funktioniert alles problemlos.

Dann ist ja alles gut.

Zitat:

Zitat von egal
Ich benutze da sowieso Variablen, nur für den Beispiel habe ich Constante genommen und hab plötzlich so was bekommen. Merkwürdig. :-D

In der Tat, aber irgendwie kommt mir der ganze Code merkwürdig vor. Wieso benutzt du denn überhaupt PChars und nicht Strings? Mir ist auch noch völlig unklar wie du ein Array von PChars (und nicht etwa Chars) ausgibst. Würde mich nicht wunder wenn du bald eine Zugriffsverletzung hättest. :?

egal 9. Nov 2004 10:37

Re: Problem mit Pchar
 
ok, shreibe noch bisschen mehr code :-D :
Delphi-Quellcode:
var p :pChar; chBsp : array of PChar;
      p := pchar('text');
      Setlength(chBsp, length(chBsp) +1);
      chBsp[High(chBsp)] := p;
      p := pchar('2');
      Setlength(chBsp, length(chBsp) +1);
      chBsp[High(chBsp)] := p;
      p := pchar('100');
      Setlength(chBsp, length(chBsp) +1);
      chBsp[High(chBsp)] := p;
In meinem Array wird so gespeichert: 'text', , '100'
Mein Array benutze ich als Übergabeparameter für Dll-Funktion, deswegen Array of PChar, quasi so: c:=myfunc(chBsp);
Und in der Dll sieht es so aus:
Delphi-Quellcode:
 myfunc(chBsp): integer;
...
cStr := string(chBsp[0];
...
Und Zugriffsverletzung hatte ich auch :oops: , aber jetzt funktioniert eigentlich ganz gut und ich habe mittlerweile schon neue Aufgabe gekriegt. :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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