Adresse eines definierten Strings ist null

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Adresse eines definierten Strings ist null

Beitrag von DrShrek »

NicTheQuick hat geschrieben:Abgesehen davon, dass '*pointer.l' und '*pString.s' keinen Sinn machen, gibt der Debugger bei mir da seltsame Dinge aus:
0

0

6559432
0
Ja, richtig. Die zweite Zeile ist leer. Da sollten eigentlich auch eine Null stehen.
Leider sind da noch mehr Probleme erkennbar:
Und die letzte Zeile sollte keine Null zurückgeben sondern die Adresse des Pointers selber.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Adresse eines definierten Strings ist null

Beitrag von helpy »

*name.s wird vom Parser nicht richtig interpretiert.
==> als einfache String-Variable und das stimmt so nicht!

Deshalb nie Pointer mit einfachen Datentypen verwenden!

Ich würde mir wünschen, dass der Compiler eine Fehlermeldung ausgibt, wenn für Pointer einfache Datentypen verwendet werden!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Adresse eines definierten Strings ist null

Beitrag von DrShrek »

helpy hat geschrieben:*name.s wird vom Parser nicht richtig interpretiert.
==> als einfache String-Variable und das stimmt so nicht!

Deshalb nie Pointer mit einfachen Datentypen verwenden!

Ich würde mir wünschen, dass der Compiler eine Fehlermeldung ausgibt, wenn für Pointer einfache Datentypen verwendet werden!
Das wäre eine Alternative....so langsam versteht Ihr das Problem.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Adresse eines definierten Strings ist null

Beitrag von helpy »

DrShrek hat geschrieben:
helpy hat geschrieben:*name.s wird vom Parser nicht richtig interpretiert.
==> als einfache String-Variable und das stimmt so nicht!

Deshalb nie Pointer mit einfachen Datentypen verwenden!

Ich würde mir wünschen, dass der Compiler eine Fehlermeldung ausgibt, wenn für Pointer einfache Datentypen verwendet werden!
Das wäre eine Alternative....so langsam versteht Ihr das Problem.
Ich weiß das und verwende es einfach nicht! Ein Problem ist das für mich nicht!
Aber es ist ein fehlerhaftes Verhalten des Compilers!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
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 definierten Strings ist null

Beitrag von ts-soft »

DrShrek hat geschrieben: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.
Wo hab ich das gesagt :freak:

Code: Alles auswählen

Define *mypointer
*mypointer = @"Hallo" 
Ich habe nur gesagt das *mypointer.s blödsinn ist. Wenn Du Dir merken möchtest worauf der Zeiger zeigt, dann nutze einen Kommentar! Ein pointer kann nur strukturiert werden, .s ist keine Struktur
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 definierten Strings ist null

Beitrag von STARGÅTE »

Das "Problem" was ich sehe ist, das es für einen Pointer, der zu einem String, zeigt, keine möglichkeit gibt ihn ohne Prozedure auszulesen.
Was ich damit meine ist, für Long kann man:

Code: Alles auswählen

Define Long.l = 123
Define *pLong.Long = @Long
Debug *pLong\l
Für String geht der Weg nur über PeekS()

Code: Alles auswählen

Define String.s = "Hallo"
Define *pString = @String
Debug PeekS(*pString)
Das Liegt daran, das @String nicht den Pointer zur eigentlichen Variable zurück gibt (also die Adresse wo der Pointer zum String drin steht) sonden den String-Pointer selbst.
Ähnliches Thema: Fragen zum String/Pointer-Beispiel der PB Hilfe

Der Weg wäre:

Code: Alles auswählen

Define String.String\s = "Hallo"
Define *pString.String = @String
Debug *pString\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
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Adresse eines definierten Strings ist null

Beitrag von bobobo »

DrShrek hat geschrieben:....so langsam versteht Ihr das Problem.
da ist keins
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Adresse eines definierten Strings ist null

Beitrag von helpy »

freak hat im englischen Forum schon vor ca. 2 Jahren geschrieben,
dass das Verhalten des Compilers in diesem Fall inkonsistent ist:
==> http://www.purebasic.fr/english/viewtop ... 17#p291717
freak hat geschrieben:Yes, it is inconsistent. The compiler should ignore the ".s" part of the pointer altogether and treat it just as a numeric variable, the same way as the ".w" in "*Pointer.w" has no real effect.
Ganz einfach an folgende Regel halten:
Niemals *var.[einfacher Datentyp] verwenden!

cu,
guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Adresse eines definierten Strings ist null

Beitrag von DrShrek »

helpy hat geschrieben:freak hat im englischen Forum schon vor ca. 2 Jahren geschrieben,
dass das Verhalten des Compilers in diesem Fall inkonsistent ist:
==> http://www.purebasic.fr/english/viewtop ... 17#p291717
freak hat geschrieben:Yes, it is inconsistent. The compiler should ignore the ".s" part of the pointer altogether and treat it just as a numeric variable, the same way as the ".w" in "*Pointer.w" has no real effect.
Ganz einfach an folgende Regel halten:
Niemals *var.[einfacher Datentyp] verwenden!

cu,
guido
1. Geben die Entwickler selber zu das hier Inkonsitenzen existieren. Schon das alleine reicht um es zu verbessern.
2. Warum gibt es keine Compiler Warnings?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
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 definierten Strings ist null

Beitrag von ts-soft »

DrShrek hat geschrieben:2. Warum gibt es keine Compiler Warnings?
Die erste wirklich sinnvolle Frage in diesem Thread :D
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
Gesperrt