AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PChar _nur_ 256 zeichen?

Ein Thema von Win32.API · begonnen am 9. Okt 2006 · letzter Beitrag vom 9. Okt 2006
Antwort Antwort
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 08:38
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?


  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 08:50
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
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#3

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 08:52
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.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 08:56
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 >>)
.......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#5

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 08:58
@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

@ste_ett
Das -1 ist schon richtig ^^

@sakura
wow danke, gleich mal testen
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 08:58
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#7

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 09:27
Zitat von Win32.API:
@ste_ett
Das -1 ist schon richtig ^^
fast ... es ist ein Array und das ist 0-basierend

Code:
for i := [color=#ff0000][b]0[/b][/color] to len - 1 do
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#8

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 09:34
Danke an alle, jetzt gehts

@Himitsu stimmt, mein fehler ^^. Aber warum geht .. for i := 1 .. dann auch?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#9

Re: PChar _nur_ 256 zeichen?

  Alt 9. Okt 2006, 09:56
weil "rein zufällig" das erste (0.) Zeichen kein #0 ist
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 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