Autor | Thema: Null-byte am Stringende | | Datum:03.05.02 11:11 
(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
|
| | Datum:03.05.02 12:05 
(schmidts@flat2serv.de) | |
Kommt auf die Profan Version an. Bei langen Strings ja (#0).
Mfg.
Sven Schmidts
|
| | Datum:03.05.02 14:00 
(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.)
|
| | Datum: 03.05.02 14:46 
(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
|
|
|