Seite 1 von 1
result.s = Chr(0) + "string"
Verfasst: 13.01.2015 13:48
von NicTheQuick
Hi Leute,
findet ihr das normal, dass hier nur "Hallo" heraus kommt?
Code: Alles auswählen
result.s = "Hallo"
result + Chr(0) + " Welt"
Debug result
Oder glaubt ihr auch, dass Chr(0) eigentlich ein Leerstring ist und " Welt" deswegen ohne Probleme noch dahinter addiert werden kann?
Schließlich geht das hier auch:
Code: Alles auswählen
result.s = "Hallo"
result + Chr(0)
result + " Welt"
Debug result
Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:13
von alter Mann
ich finde das schon i.O. da Chr(0) = Stringende
im ersten Fall wird der Ausdruck zusammengefasst Chr(0) + " Welt" = Chr(0)
im zweiten Fall wird aus "Hallo" + Chr(0) = "Hallo" und dann aus "Hallo" + " Welt" = "Hallo Welt"
Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:21
von _JON_
Also Ich finde PB's verhalten völlig richtig.
Im 1 Bsp wird alles der jeweiligen länge hintereinander zusammengestetz.
Im zweiten Bsp sucht es nach der ersten "\x00" um das Stringende zu erkennen.
Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:37
von matbal
Ich würde "Hallo Welt" erwarten. Chr(0) sollte doch das selbe sein wie "" und #NUL$
Code: Alles auswählen
result.s = "Hallo"
result + #NUL$ + " Welt"
Debug result
Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:40
von Vera
Chr(0) ist doch das Steuerzeichen NULL, was das totale Ende bedeutet
und danach geht nix mehr.
So weit ich weiß, läßt es sich per String eh' nicht zu übergeben.
(... da war was, aber ich erinner mich nicht ad hoc)
Chr(32) wäre Dein leerer Freund, oder nicht ?
Prima: mit
#NUL$ klappt's

Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:48
von NicTheQuick
Streng genommen, sollte es eigentlich funktionieren, wenn das Assoziativgesetz angewandt werden kann. Man sieht es ja oben in meinem zweiten Beispiel, wo ich eins nach dem anderen zum String "addiere". Meiner Meinung nach ist 'Chr(0)' ein eigenständiger String der Länge 0 und schließt somit genau so wenig einen String ab wie #NUL$ oder #NULL$ oder "".
Ich habe das Verhalten auch nur zufällig herausgefunden. In meinem Code stand 'Chr(variable)' und ich wollte eigentlich, dass einfach nichts passiert, wenn 'variable = 0' ist. Da das nicht geklappt hatte, wollte ich mal nachfragen, was ihr davon hält. Ich finde es nach wie vor komisch, aber sehe es auch nicht direkt als Bug, sondern eher als Purebasic-Eigenart. Davon gibt's ja nicht nur eine.

Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:52
von matbal
Bei mir verhält sich PB5.31 unter Kubuntu anders als unter Windows.
In Kubuntu erhalte ich bei deinem ersten Code "Hallo Welt", in Windows "Hallo".
Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 14:57
von NicTheQuick
matbal hat geschrieben:Bei mir verhält sich PB5.31 unter Kubuntu anders als unter Windows.
In Kubuntu erhalte ich bei deinem ersten Code "Hallo Welt", in Windows "Hallo".
Das hat mich jetzt stutzig gemacht. Und mir ist was interessantes aufgefallen, was doch eher Bug-a-like ist.
Wenn man Unicode aktiviert, dann kommt am Ende "Hallo Welt" raus. Ohne Unicode kommt nur "Hallo" raus.
Edit:
Man kann das Beispiel somit auch kürzen:
Mit Unicode kommt "Hallo Welt" raus, ohne nur "Hallo".
Re: result.s = Chr(0) + "string"
Verfasst: 13.01.2015 15:15
von Bisonte
Irgendwie hielt ich deine Frage für eine Fangfrage....
Im ASCII Mode find ich es nur logisch dass abgebrochen wird nach Chr(0).
Aber nun halte ich den Teil mit dem Unicode doch eher für einen Bug.