Seite 2 von 5

Verfasst: 17.01.2009 19:50
von mk-soft
ts-soft hat geschrieben:Bild

Hab den Thread in der Lounge nicht gelesen und werde es auch nicht tun.

Code: Alles auswählen

Define *p.Character = @"Test"

Debug "Test"
*p\c = #Null
a.s = "Test"
Debug a
Dies ist in meinen Augen ein Bug.
Ich speichere "Test" in der Stringvariablen a und es ist nicht da. Der
vorherige Code darf auf die Zeile a.s = "Test" keinerlei Auswirkung haben

Gruß
Thomas
Bei kommt es zu keinen Fehler. Der Debugger gibt "Test" aus. XP-SP3

Zu Pointern.
Wer mit Pointern arbeitet sollte wissen was er tut. Für Bereichscheck und gültige Pointer ist der Programmierer selber für verantwortlich und nicht der Compiler. Dieses sollte auch so bleiben und nicht durch den Compiler eingeschränkt werden.

Dieses ist meine Meinung

Verfasst: 17.01.2009 19:56
von cxAlex
> Bei kommt es zu keinen Fehler. Der Debugger gibt "Test" aus. XP-SP3
Der Debugger müsste aber 2* Test ausgeben. Bei dem Code ist es deutlicher:

Code: Alles auswählen

Define *p.Character = @"Test"

Debug "Da müsste Test stehen :" + "Test"
*p\c = #Null
a.s = "Test"
Debug "Da müsste Test stehen :" + a

Verfasst: 17.01.2009 20:10
von ts-soft
> Bei kommt es zu keinen Fehler. Der Debugger gibt "Test" aus. XP-SP3
Sicher das er 2x Test ausgibt?

Weder mit x86, x64 oder mit PB4.20 kommt bei mir unter Vista 2x Test

Das darf nicht sein!

Verfasst: 17.01.2009 20:16
von mk-soft
"Define *p.Character = @"Test" " ist kein String

Code: Alles auswählen

Define *p = @"Test"

Debug "Test"
PokeS(*p, "stop" ,4)
a.s = "Test"
Debug a
Ist irgendwie komisch

Verfasst: 17.01.2009 20:22
von ts-soft
> Ist irgendwie komisch
Na, wenn das kein Bug ist

Kann das mal jemand im engl. melden, der ein bissel englisch kann?

Verfasst: 17.01.2009 21:32
von hjbremer
Wenn Fred oder wer auch immer dafür zuständig ist

diesen Code sieht
Define *p = @"Test"

Debug "Test"
PokeS(*p, "stop" ,4)
a.s = "Test"
Debug a
dann fragt er sich zu Recht, wo ist hier der BUG ???

völliger Unsinn der Code :mrgreen:

Verfasst: 17.01.2009 21:41
von cxAlex
hjbremer hat geschrieben:Wenn Fred oder wer auch immer dafür zuständig ist

diesen Code sieht
Define *p = @"Test"

Debug "Test"
PokeS(*p, "stop" ,4)
a.s = "Test"
Debug a
dann fragt er sich zu Recht, wo ist hier der BUG ???

völliger Unsinn der Code :mrgreen:
Der Code ist kein Unsinn sondern das Verhalten des Compilers. Man kann nicht alles auf den Programmierer schieben und sagen, sowas machst man nicht. Wenn ich schreibe a.s = "Test" erwarte ich auch das dann "Test" drinsteht.

Verfasst: 17.01.2009 21:42
von freak
Ist kein Bug.

@"Test" gibt die Position des statischen "Test" strings zurück. Den gibt es in der Exe nur einmal (wäre ja auch Unsinn X mal die gleiche Bytesequenz in die Exe zu schreiben).
Wenn man den ändert dann hat man alle "Test" Strings geändert. Ist irgendwie logisch.

Wenn man den String einer Variable zuweist bekommt man eine Kopie und kann die manipulieren wie man will. String literale sind nicht zum manipulieren gedacht.

Verfasst: 17.01.2009 21:48
von STARGÅTE
hmm vllt Bietet das ja völlig neue Möglichkeiten der Multi-Sprach Anwendungen:

So könnte man den Ganzen Code in seiner Sprache schreiben also mit normalen Strings wie:
"Einzelspieler", usw.

und wenn dann jemand die Sprache Umstellt werden einfach die Strings "geändert"

Somit entfallen die Variable oder Konstanten für Texte , welche in verschiedenen Sprachen sein sollen (ist damit vllt übersichtlicher)

Am anfang müsste man halt nur alle Texte in einer LL speichern, und dann eine alternative Sprachliste "drüberladen"

Also KEIN BUG, sondern einer potentialbehaftete neuigkeit ...

Verfasst: 17.01.2009 21:54
von cxAlex
freak hat geschrieben:Ist kein Bug.

@"Test" gibt die Position des statischen "Test" strings zurück. Den gibt es in der Exe nur einmal (1) (wäre ja auch Unsinn X mal die gleiche Bytesequenz in die Exe zu schreiben).
Wenn man den ändert dann hat man alle "Test" Strings geändert. Ist irgendwie logisch.

Wenn man den String einer Variable zuweist bekommt man eine Kopie und kann die manipulieren wie man will. (2) String literale sind nicht zum manipulieren gedacht.
Zum 1: geb ich dir recht, alles andere währe Unsinn.
Zum 2: Dann sollte man das ganze ReadOnly machen, dann kriegt man eine Fehlermeldung und kann sowas erst gar nicht machen.

@Stargate: Wird nicht gehen.
Wenn du jetzt z.B. "Test" überschreibst kannst du nur 4 Zeichen überschreiben. Wenn du jetzt z.B. "Player" als String hast und überschreibst ihn mit "Spieler" steht da nur "Spiele" und das "r" rutsch irgendohin und du hast den nächsten Speicherfehler/veänderst irgendwas.