Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PChar _nur_ 256 zeichen? (https://www.delphipraxis.net/78664-pchar-_nur_-256-zeichen.html)

Win32.API 9. Okt 2006 08:38


PChar _nur_ 256 zeichen?
 
Ich habe folgende Funktion :

Delphi-Quellcode:
function meep(pc: PChar; len: Integer): Pchar;
var
  i: integer;
begin
  for i := 1 to len - 1 do
    if (pc[i] = #0) then
      pc[i] := '.';
  result := Pchar(pc + #0);
end;


var
  i : integer;
  pc : Pchar;
begin
  pc := '';
  for i := 1 to 1111 do
    pc := PChar(pc + '#');
  showmessage(inttostr(length(pc)));
  pc := meep(pc,length(pc));
  showmessage(inttostr(length(pc)));
end;
Die erster Meldung gibt mir 256 und die zweite 255 zurueck. Warum sind die beiden Meldungen nicht identisch, in dem fall 1111?


:gruebel:

marabu 9. Okt 2006 08:50

Re: PChar _nur_ 256 zeichen?
 
Hi,

String-Konstanten werden intern als short string (max. 255 Zeichen) geführt. Bei der Verkettung mit einem C-String (PChar) werden die beiden Operanden angepasst und die Restriktion gilt dann auch für das Ergebnis.

Grüße vom marabu

ste_ett 9. Okt 2006 08:52

Re: PChar _nur_ 256 zeichen?
 
Zitat:

Zitat von marabu
Hi,

String-Konstanten werden intern als short string (max. 255 Zeichen) geführt. Bei der Verkettung mit einem C-String (PChar) werden die beiden Operanden angepasst und die Restriktion gilt dann auch für das Ergebnis.

Grüße vom marabu

Hm ich hätte jetzt darauf getippt, das es am "... to len -1" leigt. :)

sakura 9. Okt 2006 08:56

Re: PChar _nur_ 256 zeichen?
 
Hier die Lösung:
Delphi-Quellcode:
function meep(pc: PChar; len: Integer): Pchar;
var
  i: integer;
begin
  for i := 1 to len - 1 do
    if (pc[i] = #0) then
      pc[i] := '.';
>> result := Pchar(string(pc) + #0);
end;

var
  i : integer;
  pc : Pchar;
begin
  pc := '';
  for i := 1 to 1111 do
>>   pc := PChar(string(pc) + '#');
  showmessage(inttostr(length(pc)));
  pc := meep(pc,length(pc));
  showmessage(inttostr(length(pc)));
end;
(siehe nach >>)
...:cat:....

Win32.API 9. Okt 2006 08:58

Re: PChar _nur_ 256 zeichen?
 
@Marabu
Danke fuer deine Antwort, nur wie kann ich das umgehen?
In meinem Projekt liegt ein Pchar mit 800 zeichen vor, sobald ich ihm durch meine Funktion jage werden aus 800 255 :gruebel:

@ste_ett
Das -1 ist schon richtig ^^

@sakura
wow danke, gleich mal testen :mrgreen:

Jürgen Thomas 9. Okt 2006 08:58

Re: PChar _nur_ 256 zeichen?
 
Hallo Win32.API,

ich wollte zunächst nur darauf hinweisen, dass Du string-Bearbeitung (pc + '#') und PChar-Bearbeitung (pc ist PChar) mixt. Das gleicht Delphi zwar automatisch an, aber teilweise mit unklaren Ergebnissen.

Marabu hat diesen Hinweis bereits erweitert, nämlich welches unklare Ergebnis auftritt.

Wenn Du zwischen string und PChar hin- und herschalten willst/musst, dann deklariere Dir getrennte Variable und benutze die jeweils vorgesehenen Methoden.

Gruß Jürgen

himitsu 9. Okt 2006 09:27

Re: PChar _nur_ 256 zeichen?
 
Zitat:

Zitat von Win32.API
@ste_ett
Das -1 ist schon richtig ^^

fast ... es ist ein Array und das ist 0-basierend :warn:

Code:
for i := [color=#ff0000][b]0[/b][/color] to len - 1 do

Win32.API 9. Okt 2006 09:34

Re: PChar _nur_ 256 zeichen?
 
Danke an alle, jetzt gehts :thumb:

@Himitsu stimmt, mein fehler ^^. Aber warum geht .. for i := 1 .. dann auch?

himitsu 9. Okt 2006 09:56

Re: PChar _nur_ 256 zeichen?
 
weil "rein zufällig" das erste (0.) Zeichen kein #0 ist :zwinker:


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