Adresse eines String ist null

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Adresse eines String ist null

Beitrag von hjbremer »

Ich finde folgendes ganz schön doof

die Adresse einer Stringvariablen ist null, wenn dem String noch kein Wert zugewiesen wurde, im Gegensatz zu Integervariablen etc.

Code: Alles auswählen

Define a.i
Define t.s
Define tt.s = ""
Define v$
Define vv$ = ""

Debug @a
Debug @t
Debug @tt
Debug @v$
Debug @vv$
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Adresse eines String ist null

Beitrag von STARGÅTE »

Was ist daran doof ?
Reinschreiben mit PokeS darfst du eh nicht !

Und wenn du den Pointer zum StringPointer willst:

Code: Alles auswählen

Define a.i
Define t.String
Define tt.String\s = ""

Debug @a
Debug @t
Debug @tt
Debug @t\s
Debug @tt\s
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Adresse eines String ist null

Beitrag von hjbremer »

Reinschreiben mit PokeS darfst du eh nicht !

Code: Alles auswählen

;dies geht

Define t.s = ""
PokeS(@t, "hallo")
Debug t

;hingegen dies geht nicht

Define tt.s 
PokeS(@tt, "hallo")
Debug tt
und dieses Verhalten finde ich Grrrh
ich muß bei jedem definieren ein Wert zuweisen und sei es nur ""
wenn ich es vergesse, und PokeS benutze, dann Error

Bei Stringfelder ist es genauso :(
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Adresse eines String ist null

Beitrag von ts-soft »

Geht und Geht nicht sind so eine Sache :wink:

Schalt mal den Purifier ein, dann siehst Du, das
beides nicht geht, sondern ersteres nur weil sich
dort zufällig leerer Speicher befindet!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Adresse eines String ist null

Beitrag von STARGÅTE »

Wie schon geschreiben, zerlöcherst du dir mit sowas das ganze Programm.

Code: Alles auswählen

Define String1.s = ""
Define String2.s = "Laber"
PokeS(@String1, "Alles kaputt gemacht")
Debug String1
Debug String2
Alles kaputt gemacht
acht
In dem Beispiel, wird der Speicher von "Laber" einfach überschrieben
Passiert das mit etwas "wichtigerem" gibs riesen BUGs
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Adresse eines String ist null

Beitrag von hjbremer »

Uuuuuups

das ist ja doof :(

und nu ? aber so geht es wieder oder wieder ein Haken dabei ?

Code: Alles auswählen

Define String1.s = "ggggggggggggggggggggggg"
Define String2.s = "Laber"
PokeS(@String1, "nix kaputt gemacht")
Debug String1
Debug String2
das steht aber so nirgends und ich muß gestehen, ich bin bisher darüber auch nicht gefallen.
irgendwie müßte das geändert werden :mrgreen:

ich finde die Stringverwaltung hat da ne Macke.
schlimmer dein Beispiel geht so durch ohne Gemecker vom Compiler
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Adresse eines String ist null

Beitrag von STARGÅTE »

Jo in diesem Fall würde es gehen ... aber du darf eben immer nur gleicher/gleich werden!
Sonst schreibst du wieder in unbekannte Ressourcen.

Wenn du wirklich mit PokeS() auf diese weise arbeten willst, nutze gleich einen FIX-String, deren Adresse sind niemals ändet

Code: Alles auswählen

Define String.s{128}
Debug @String
String = "Hallo"
Debug String
String = ""
Debug String
Debug @String
so kannst du sicherstellen das gleich ein Pointer existiert und immer genau 128 Bytes reserviert sind.
ich finde die Stringverwaltung hat da ne Macke.
Wieso?
Ist doch gut, das PB dynamische Strings anbietet deren Inhalt in einem Pool ist, in dem man eben nicht rumfuschen soll.

Deswegen FIX-Strings!
Bei PokeS() immer schon die max-Länge angeben (hier 127, wegen der End-Null) damit es nie zum overwrite kommt.
Zuletzt geändert von STARGÅTE am 22.02.2011 19:40, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Adresse eines String ist null

Beitrag von ts-soft »

>> schlimmer dein Beispiel geht so durch ohne Gemecker vom Compiler
Dafür ist der Purifier da, der meckert dann schon. Wäre der immer an, würde das aber alles
verlangsamen und sowas möchten wir ja auch nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Adresse eines String ist null

Beitrag von hjbremer »

Ja so ist das, aber dann sollte das auch in der Hilfe für PokeS stehen !!!
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Adresse eines String ist null

Beitrag von ts-soft »

hjbremer hat geschrieben:Ja so ist das, aber dann sollte das auch in der Hilfe für PokeS stehen !!!
Purebasic.chm hat geschrieben:Für fortgeschrittene Programmierer
Es steht also da :mrgreen: , jeder fortgeschrittene Programmierer weiß, das man nicht in unreservierten
Speicher schreiben darf.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten