Pointer klappt nicht

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Pointer klappt nicht

Beitrag von Franky »

Hi

Es will mal wieder net /:->

Ich will mittels Pointer die adresse eines Strings übergeben (ich hoffe, dat is jetzt richtig erklärt)


So sieht die Procedure aus

Code: Alles auswählen

Procedure Instring(*string.BYTE,usepos.l)       
       If *string=0
            MessageRequester("Is ja klar","So kann das net gehen")
       EndIf
EndProcedure
Und so wirds jeweils übergeben

Code: Alles auswählen

If Instring(@proctext,procpos)=0
Nun, wat soll ich sagen, *string ist immer 0
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

bei mir ist es nie 0 :?

Code: Alles auswählen

Procedure Instring(*str)
       If *str=0
            MessageRequester("Is ja klar","So kann das net gehen")
       EndIf
EndProcedure

txt.s = "Hallo"
Instring(@txt)
[EDIT] achja: antworte im icq mal
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Pointer klappt nicht

Beitrag von PMV »

Hm, bei mir gehts O_o

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, mir kommt ja

Code: Alles auswählen

*string.BYTE
merkwürdig vor...

...müsste das nicht

Code: Alles auswählen

*string.s
heissen?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

ne, weil man den String sonst nicht Byte für Byte abarbeiten kann.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
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

Beitrag von NicTheQuick »

@Kaeru: Das hat schon seine Richtigkeit.
Zum Beispiel für schnelle Stringroutinen:

Code: Alles auswählen

Procedure Quersumme_ASCII(*string.BYTE)
  Protected Summe.l
  While *string\b
    Summe + *string\b & $FF
    *string + 1
  Wend
  ProcedureReturn Summe
EndProcedure

Debug Quersumme_ASCII(@"huhu")
; oder was lustiges
Debug Quersumme_ASCII(@"150")
Debug Quersumme_ASCII(@"159")
@Franky: Das scheint eine Unstimmigkeit in PureBasic zu sein. Schau mal hier. Ich hab den selben Fehler. Allerdings auch eine Lösung dafür. :mrgreen:

Code: Alles auswählen

Procedure Instring(*string.BYTE, usepos.l)       
  If *string=0
    MessageRequester("Is ja klar","So kann das net gehen")
  Else
    MessageRequester("Klar","So geht das")
  EndIf
EndProcedure 


procpos.l
proctext.s

Instring(@proctext, procpos)

proctext = ""
Instring(@proctext, procpos)
PS.: Mozilla Firefox ist echt bescheuert. Ich deinstallier das nochmal. Der kann ja noch net mal Smilies und Code-Tags so setzen wie es sein soll. /:->
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Is doch klar, "proctext.s" sagt dem Compiler nur das die Variable "proctext" ein String sein soll, aber nicht das der String erstellt werden soll.. wozu denn auch, würde normalerweise nur Speed kosten. Und weil der String dann noch nicht existiert ist der Pointer darauf logischerweise 0.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Deeem

*handvordiestirnklatsch*

da muss man bei dem mini-schnipsel erstmal drauf kommen,
dass er die Var nicht vordefiniert hat...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten