Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi string 0 terminiert? (https://www.delphipraxis.net/194204-string-0-terminiert.html)

p80286 28. Okt 2017 21:10

AW: string 0 terminiert?
 
Zitat:

Zitat von Ydobon (Beitrag 1384400)
Zitat:

Zitat von Zacherl (Beitrag 1384385)
Delphi Strings sind standardmäßig nicht nullterminiert.

Waren die nicht kurzen Strings nicht schon von Anfang an eine Chimäre, also sowohl Längen- und Referenzzähler aber zusätzlich auch noch ein bis zwei Nullbyte zum Abschluss?

nein,ja,nein,nein

die Shortstrings bestehen aus einem Längenbyte und 255 CharBytes.

Gruß
K-H

uligerhardt 29. Okt 2017 08:22

AW: string 0 terminiert?
 
Normale Delphi-Strings (also AnsiString/UnicodeString) haben eine 0 hintendran, damit der PChar-Cast ohne Speicherallozierung etc. funktioniert.
Wenn du willst, kannst du das natürlich mit irgendwelcher Low-level-Bitschubserei hinter Delphis Rücken torpedieren. :mrgreen:
Aber bei String-Verkettung und so bleibt die 0-Terminierung erhalten.

EWeiss 29. Okt 2017 09:40

AW: string 0 terminiert?
 
Das ist wieder ein Thema wo unterschiedliche Meinungen kursieren.
Es muss doch möglich sein vom Standard abzuleiten.

Der eine Ja, der andere Nein, der nächste Ja.. was denn nu ist Korrekt und wird in der Sprache (Delphi) verwendet.

gruss

Fritzew 29. Okt 2017 10:20

AW: string 0 terminiert?
 
Zitat:

Zitat von EWeiss (Beitrag 1384446)
Das ist wieder ein Thema wo unterschiedliche Meinungen kursieren.
Es muss doch möglich sein vom Standard abzuleiten.

Der eine Ja, der andere Nein, der nächste Ja.. was denn nu ist Korrekt und wird in der Sprache (Delphi) verwendet.

gruss

Es ist eigentlich ganz einfach.......
Delphi Strings (UnicodeString, AnsiString) benötigen kein #0 am Ende und erwarten es auch nicht.
Dies Typen haben ein internes Längenfeld wo die aktuelle Länge gespeichert wird.
Wenn so ein String nach Pchar (Pwidechar, Pansichar) gecastet wird ein #0 am Ende angehängt. (lassen wir die technische Seite mal weg). Das ist nützlich weil diese Strings so einfach z.B zur WindowsApi übergeben werden können.

Solange Du mit den Delphi String Funktionen arbeitest muss Dich das nicht interessieren.
Wenn Du aber selber ein #0 anhängst so ala String := String +#0 dann wird die Länge um 1 erhöht und das #0 ist Bestandteil des DelphiStrings. Wird dieser nun nach Pchar etc.. gecastet sieht das dann aus wie String#0#0.
Umgekehrt gilt dann aber wird dieser Pchar zurück zu einem String gecastet fallen beide #0 weg.

Beispiel

Delphi-Quellcode:
procedure test;
 var
   a : array[0..10] of char;
   l: Integer;
   pa : PChar;
   s : String;
begin

   s := 'Test';
   l := length(s);  // 4

   s := s + #0;    // s = 'Test'#0;
   l := length(s); // 5

   pa := @a[0];
   StrPCopy(pa, s);

   l := strlen(pa); //  4

   s := pa;   // s = 'Test';
   l := length(s); //4

end;

EWeiss 29. Okt 2017 10:26

AW: string 0 terminiert?
 
Jo. Danke mich wundert nur das hier wieder alle eine andere Meinung dazu haben.
Und man am ende nicht weis an was man sich halten soll!

Das meine ich mit Standard.

gruss

Bernhard Geyer 29. Okt 2017 11:01

AW: string 0 terminiert?
 
Zitat:

Zitat von EWeiss (Beitrag 1384453)
Jo. Danke mich wundert nur das hier wieder alle eine andere Meinung dazu haben.
Und man am ende nicht weis an was man sich halten soll!

Hä? Bisher haben doch im Prinzip alle das gleiche gesagt.

Zitat:

Zitat von EWeiss (Beitrag 1384453)
Das meine ich mit Standard.

Am besten liest du dir die Beschreibung des internen Speicherformats für die diversen Delphi-Stringtypen durch.
http://docwiki.embarcadero.com/RADSt...e_String-Typen

EWeiss 29. Okt 2017 11:03

AW: string 0 terminiert?
 
Zitat:

Hä? Bisher haben doch im Prinzip alle das gleiche gesagt.
Kann ich nicht bestätigen aber egal.

bin raus.

gruss

uligerhardt 29. Okt 2017 12:13

AW: string 0 terminiert?
 
Zitat:

Zitat von EWeiss (Beitrag 1384457)
Zitat:

Hä? Bisher haben doch im Prinzip alle das gleiche gesagt.
Kann ich nicht bestätigen aber egal.

Na ja, manche haben das Gleiche wie ich gesagt und manche was Falsches. :twisted:

Bernhard Geyer 29. Okt 2017 12:44

AW: string 0 terminiert?
 
Zitat:

Zitat von uligerhardt (Beitrag 1384459)
Zitat:

Zitat von EWeiss (Beitrag 1384457)
Zitat:

Hä? Bisher haben doch im Prinzip alle das gleiche gesagt.
Kann ich nicht bestätigen aber egal.

Na ja, manche haben das Gleiche wie ich gesagt und manche was Falsches. :twisted:

Eigentlich war das falsche (wenn du den gleichen Post meindest) auch nur eine Frage.

Ansonsten haben doch alle das gleiche Bezüglich "Delphistring hat immer #0 am Ende" gesagt.

uligerhardt 29. Okt 2017 12:48

AW: string 0 terminiert?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1384460)
Eigentlich war das falsche (wenn du den gleichen Post meindest) auch nur eine Frage.

Ansonsten haben doch alle das gleiche Bezüglich "Delphistring hat immer #0 am Ende" gesagt.

Naja, vielleicht hab ich manche missverstanden. Dein Link zur Doku sollte jedenfalls alle Fragen geklärt haben. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr.
Seite 2 von 3     12 3      

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