result.s = Chr(0) + "string"

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

result.s = Chr(0) + "string"

Beitrag 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
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Re: result.s = Chr(0) + "string"

Beitrag 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"
Win11 64Bit / PB 6.0
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: result.s = Chr(0) + "string"

Beitrag 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.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: result.s = Chr(0) + "string"

Beitrag 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
Benutzeravatar
Vera
Beiträge: 928
Registriert: 18.03.2009 14:47
Computerausstattung: Win XP SP2, Suse 11.1
Wohnort: Essen

Re: result.s = Chr(0) + "string"

Beitrag 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 :allright:
°
<°)))o><
~~~~~~~~~
echo "Don't worry"
echo "Keep quiet"
@echo off
format forum:\
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: result.s = Chr(0) + "string"

Beitrag 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. :mrgreen:
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: result.s = Chr(0) + "string"

Beitrag 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".
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: result.s = Chr(0) + "string"

Beitrag 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. :lol:

Edit:
Man kann das Beispiel somit auch kürzen:

Code: Alles auswählen

Debug "Hallo" + Chr(0) + " Welt"
Mit Unicode kommt "Hallo Welt" raus, ohne nur "Hallo".
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: result.s = Chr(0) + "string"

Beitrag 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.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten