Nur wenn man einen String zuweist, gibt es eine Adresse, selbst wenn dies ein Nullstring ist
Code: Alles auswählen
Define ipsumme1.s
Define ipsumme1$
Debug @ipsumme1
Debug @ipsumme1$
ipsumme1 = ""
ipsumme1$ = ""
Debug @ipsumme1
Debug @ipsumme1$
Code: Alles auswählen
Define ipsumme1.s
Define ipsumme1$
Debug @ipsumme1
Debug @ipsumme1$
ipsumme1 = ""
ipsumme1$ = ""
Debug @ipsumme1
Debug @ipsumme1$
Warum?Adresse eines definierten Strings ist null, das nervt und ist für mich ein BUG !
Code: Alles auswählen
define.s ipsumme1 = space(255)
Code: Alles auswählen
EnableExplicit
Define i.l,t.l, is.l
Define ipsumme1.s =""
Define ipsumme1$ =""
Define.s ipsumme2=Space(255)
Debug @ipsumme1
Debug @ipsumme1$
For i = 1 To 20 Step 1
t+1
ipsumme1 + Str(t)
ipsumme1$ = "2"
If is<>@ipsumme1
Debug Str(@ipsumme1) +"::Speicheradresse ipsumme1 bei Länge:"+Str(Len(ipsumme1))
Debug Str(@ipsumme2) +"::Speicheradresse ipsumme2 bei Länge:"+Str(Len(ipsumme2))
;Debug @ipsumme1$
is=@ipsumme1
EndIf
Next i
Code: Alles auswählen
Define ipsumme1.s
Define ipsumme1$
Debug ipsumme1
Debug ipsumme1$
Das ist nicht logisch. Weil dann müsste es bei anderen Typen ähnlich sein:bobobo hat geschrieben:weil es so korrekt ist.
Ein leerer String (egal ob für den letztlich Speicher reserviert ist oder nicht) ist halt leer
Code: Alles auswählen
Define ipsumme1.s
Define ipsumme1$
Debug ipsumme1
Debug ipsumme1$
Debug @ipsumme1
Debug @ipsumme1$
Code: Alles auswählen
Define ipsumme1.l
Debug ipsumme1
Debug @ipsumme1
Die Antworten sind einfach:bobobo hat geschrieben:nun stell ich mal zwei Fragen und die musst Du beantworten.
1)Was ist eine IntegerVariable?
2) Was ist ein String ?
Code: Alles auswählen
Define ipsumme1.s
Debug Len(ipsumme1)
Debug Len("")
Debug @""
Debug @ipsumme1
Code: Alles auswählen
Define test.s
Procedure testString(test.s)
Debug @test
EndProcedure
Debug @test
testString(test)
test = ""
Debug @test
testString(test)
Code: Alles auswählen
0
0
4005548
4005580
Code: Alles auswählen
Define test.s
Procedure testString(test.s)
Debug @test
EndProcedure
Procedure parseString(test.s)
Protected *char.Character
Protected c.c
*char = @test
Debug *char
;c = *char\c ; Da Pointer NULL ist, würde hier ein Fehler gemeldet werden!
;Debug c
If Not *char
; Entsprechende Behandlung!
Debug "Nicht initialisierter String!"
ProcedureReturn
EndIf
c = *char\c
Debug c
EndProcedure
MessageRequester("","test 1")
Debug @test
testString(test)
parseString(test)
Debug ""
MessageRequester("","test 2")
test = ""
Debug @test
testString(test)
parseString(test)
Debug ""
MessageRequester("","test 3")
test = "Hallo"
Debug @test
testString(test)
parseString(test)