Wieso denn? Die PB-Standardstrukturen "Long", "Quad" und Co sind doch auch nichts anderes... Nur, dass Sie nicht im Code definiert werden müssen. Oder entgeht mir da ein Detail?auser hat geschrieben:Eine Struktur die genau ein Feld hat finde ich ziemlich fail. Funktioniert schon aber ich finde das ist ein unschöner Workaround.
Stimmt, da war ich etwas zu "absolut" in meiner Ausdrucksweise. Eine Stärke von PureBasic gegenüber C ist ja, dass man sich beim normalen Umgang mit String um nichts einen Kopf machen muss. Sobald Zeiger ins Spiel kommen wird's kritisch... Besonders auch, weil die Adresse von festen Stringvariablen (z.B. foo${123}) nie #Null ist, während flexible Stringvariablen (z.B. foo$) nach der Definition erstmal die Adresse #Null besitzen, ausser man weist ihnen direkt einen Leerstring zu:auser hat geschrieben:Strings gibt's schon eine Lösung. Musste halt Pieksen und Popeln...und dabei aufpassen daß du keinen Overflow produzierst
Code: Alles auswählen
EnableExplicit
EnableASM
;{ AddressOfString(String, Destination)
CompilerSelect #PB_Compiler_Processor
CompilerCase #PB_Processor_x64
Macro AddressOfString(String, Destination)
LEA rax, String : MOV Destination, rax
EndMacro
CompilerCase #PB_Processor_x86
Macro AddressOfString(String, Destination)
LEA eax, String : MOV Destination, eax
EndMacro
CompilerDefault
CompilerError "Processor <> x64 And Processor <> x86"
CompilerEndSelect
;}
Define a$
Define b$ = #NUL$
Define c${1}
Define d${1} = #NUL$
Define a, b, c, d
AddressOfString(a$, a)
AddressOfString(b$, b)
AddressOfString(c$, c)
AddressOfString(d$, d)
Debug @a$
Debug a
Debug ""
Debug @b$
Debug b
Debug ""
Debug @c$
Debug c
Debug ""
Debug @d$
Debug d
Nebenbei: Ist schon interessant mal über den Tellerrand hinauszuschauen und PB mit anderen Sprachen zu vergleichen!