Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 241170 (2606)
  Suchen
 Zurück zur Übersicht
 AutorThema: Null-byte am Stringende
Philipp Sternberg
Datum:03.05.02 11:11 Antwortenals Email verschicken (ps@burghardt-ib.de) 


Hallo, kurze Frage

wenn ich eine Stringvariable habe mit einem wert:
let string$ = "BEISPIEL"
hat der String dann am ende automatisch ein Nullbyte oder nicht ??
bzw ist dann
string$ == string string#,0 = "BEISPIEL"
oder
string$ == char string#,0 = "BEISPIEL"
Vielen Dank für evtl. Antworten...

Philipp Sternberg



Sven Schmidts
Datum:03.05.02 12:05 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Kommt auf die Profan Version an. Bei langen Strings ja (#0).

Mfg.
Sven Schmidts


Roland G. Hülsmann
Datum:03.05.02 14:00 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Ich nehme an, Dir geht es um den Unterschied zwischen den Befehlen String und Char:

string string#,0 = "BEISPIEL"

Hier wird hinter den 8 Bytes des Strings noch ein Null-Byte angehängt, sodaß der benötigte Speicherplatz 1 mehr, als die Länge des Strings ist, in diesem Fall also exakt 9 Bytes.

char string#,0 = "BEISPIEL"

Hier wird kein Null-Byte angehängt und daher werden hier auch nur 8 Bytes in der Bereichsvariable beschrieben.

Intern verwendet PROFAN die langen Strings, wie sie auch Delphi verwendet: d.h. die Längeninformation des Strings wird in den vier Bytes vor der Anfangsadresse des Strings verwaltet. Auf diese Weise können auch Strings in PROFAN das Zeichen mit dem Wert 0 ( Chr$(0) ) enthalten. Ein Null-Byte wird hier also nicht als String-Begrenzung betrachtet!

(Anders ist es bei Windows-API und anderen DLLs: Hier gilt ein Nullbyte als Stringende. Eine andere Information über die Länge des Strings gibt es dann nicht.)


Philipp Sternberg
Datum: 03.05.02 14:46 Antwortenals Email verschicken (ps@burghardt-ib.de) 


Vielen Dank für eure schnellen antworten.

Das heißt also, dass ich an eine Api-Funktion auch einen string übergeben kann, der mitten drinnen null-bytes enthält (die Message TB_ADDSTRING verlangt einen solchen),

@sendmessge(toolbar&,TB_ADDSTRING,dll_inst&,@AddR(string$))

Wenn ich euch richtig verstanden hab bedeutet dies:
In diesem Fall kann ich unter Profan 7.x statt
string string#,0 = "BEISPIEL" auch string$ verwenden,
während ich bei Profan "kleiner 7.0"
statt string string#,0 = "BEISPIEL" nicht string$ sondern string$+@chr$(0) verwenden müsste (und AddR(string$)+1).

Danke


 Zurück zur Übersicht