Seite 1 von 1
Adresse eines String ist null
Verfasst: 22.02.2011 17:35
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$
Re: Adresse eines String ist null
Verfasst: 22.02.2011 17:44
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
Re: Adresse eines String ist null
Verfasst: 22.02.2011 18:25
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

Re: Adresse eines String ist null
Verfasst: 22.02.2011 18:29
von ts-soft
Geht und Geht nicht sind so eine Sache
Schalt mal den Purifier ein, dann siehst Du, das
beides nicht geht, sondern ersteres nur weil sich
dort zufällig leerer Speicher befindet!
Re: Adresse eines String ist null
Verfasst: 22.02.2011 18:36
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
Re: Adresse eines String ist null
Verfasst: 22.02.2011 19:26
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
ich finde die Stringverwaltung hat da ne Macke.
schlimmer dein Beispiel geht so durch ohne Gemecker vom Compiler
Re: Adresse eines String ist null
Verfasst: 22.02.2011 19:30
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.
Re: Adresse eines String ist null
Verfasst: 22.02.2011 19:33
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.
Re: Adresse eines String ist null
Verfasst: 22.02.2011 19:38
von hjbremer
Ja so ist das, aber dann sollte das auch in der Hilfe für PokeS stehen !!!
Re: Adresse eines String ist null
Verfasst: 22.02.2011 19:42
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

, jeder fortgeschrittene Programmierer weiß, das man nicht in unreservierten
Speicher schreiben darf.