Re: Adresse eines definierten Strings ist null
Verfasst: 18.05.2011 18:08
Die erste sinnvoll Antwort hier... Ähh ich meine 'von Dir'ts-soft hat geschrieben:Die erste wirklich sinnvolle Frage in diesem Thread

Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Die erste sinnvoll Antwort hier... Ähh ich meine 'von Dir'ts-soft hat geschrieben:Die erste wirklich sinnvolle Frage in diesem Thread
Ein Pointer ist kein String, ein String ist genau genommen kein Pointer.DrShrek hat geschrieben:Sorry aber das kann ich auf keinen Fall so stehen lassen!
Es gehört zum guten Stil eines Programmieres dass er die Möglichkeit hat festzulegen von welchen Typ der Pointer ist, und das natürlich auch bei einfachen Typen:
@ts-soft,
Hier speziell für Dich ein paar Beispiele um nochmal Deine Aussage zu überdenken:Laut Deiner Aussage darf es also keine Pointer auf Strings geben also kein: *pointer.sts-soft hat geschrieben:Entweder es ist ein Pointer oder es ist ein String. Einen kombinierten Typ gibt es nicht.
ich kann aber @"Ich bin ein String" eingeben und erhalte die Anfangsadresse deieses Strings. Laut Deiner Aussage darf ich diese Adresse in keinen Pointer zwischenspeichern? Sehr komisch.
Wenn hier intern tatsächlich ein Null-Pointer vorliegt, so erscheint letzteres doch total schwachsinnig. Dass der Compiler WasBinIch wie eine ganz gewöhnliche "String-Variable" mit leerem Inhalt behandelt, ist, wie DrShrek sagte, prinzipiell falsch.EnableExplicit
Define WasBinIch.s
Debug @WasBinIch
Debug "Hallo"+WasBinIch+" Welt!" ; <--- ?!
Code: Alles auswählen
Define a.i
Debug a ;Oh nein, da wird ja 0 debuggt.
Debug 3+a ;Und hier wird 3 debuggt, wie kann das denn sein?
;Sollte da nicht ein Compilerwarnung erscheinen?
;Am besten mit Abbruch des Kompiliervorgangs?!
Code: Alles auswählen
Define var.s
MessageRequester("Title", var) ;Compiler Warnung, Programmabsturz, wollen sie einen Problembericht an Microsoft senden....
Code: Alles auswählen
Define var.s
If @var <> 0
MessageRequester("Title", var)
Else
MessageREquester("Title", "")
Endif
Das ist eben nicht das gleiche. Ein nicht vorhandener String, siehe Null-Pointer in meinem Beispiel, ist einfach...nunja...etwas was de facto nicht vorhanden ist, da wird kein Speicherplatz reserviert. Ein leerer String (leer bitte nicht in Anführungszeichen) muss initialisiert werden, da wird eben Speicher reserviert (1 Byte). Das 0-Byte gehört sehr wohl zum String. Und dass ein Null-Pointer dennoch als String behandelt wird, ist äußerst fragwürdig.Ein "leerer" String, also nur ein 0-Byte ist doch das gleiche, wie ein nicht vorhandener (noch nicht definierter) String, da das 0-Byte ja nicht zum String gehört, sondern diesen nur abschließt.
Hast du wirklich verstanden, worum es hier geht? Was hat der Integer Datentyp mit Strings zu tun? Glaubst du, nur weil Debug a 0 ausgibt, wäre a ein Null-Pointer?Mich wundert ja, dass sich darüber noch niemand beschwert hat:Code: Alles auswählen
Define a.i Debug a ;Oh nein, da wird ja 0 debuggt. Debug 3+a ;Und hier wird 3 debuggt, wie kann das denn sein? ;Sollte da nicht ein Compilerwarnung erscheinen? ;Am besten mit Abbruch des Kompiliervorgangs?!
Das meinte DrShrek legitimer Weise von Anfang an, richtig. Wer sich mit maschinennahen Programmiersprachen beschäftigt hat, bei DrShrek definitiv der Fall, dem kommt sowas nun mal ziemlich fragwürdig vor.Ich vernehme hiermit X0r's Vorschlag:. Eine Stringvariable ohne zugewiesenen Wert, darf nicht wie eine Stringvariable, der ein leerer String zugewiesen wurde behandelt werden.
Ansonsten ist es mir ehrlich gesagt sch... egal, was PB intern macht, von mir aus können die Pointer aller leeren Strings auch auf die Adresse 1337 zeigen...
TomS,TomS hat geschrieben: Mich wundert ja, dass sich darüber noch niemand beschwert hat:Code: Alles auswählen
Define a.i Debug a ;Oh nein, da wird ja 0 debuggt. Debug 3+a ;Und hier wird 3 debuggt, wie kann das denn sein? ;Sollte da nicht ein Compilerwarnung erscheinen? ;Am besten mit Abbruch des Kompiliervorgangs?!
Code: Alles auswählen
Define a.l
Define b.String
Define c.c
Define *aa.l
Define *aaa.Long
Define *bb.s
Define *bbb.String
Debug a
Debug b
Debug c
Debug *aa
Debug *aaa
Debug *bb
Debug *bbb
Genau das ist es ja wovon ich die ganze Zeit rede. Wenn der String Pointer eine Adresse hat wäre es nich zu diesen Entry gekommenAnsonsten ist es mir ehrlich gesagt sch... egal, was PB intern macht, von mir aus können die Pointer aller leeren Strings auch auf die Adresse 1337 zeigen...