PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zuweisung in Feld aus Strings überschreitet Längendefinition ohne Fehler: Warum?



snafu
08.04.2011, 14:24
Hallo zusammen, habe ein Feld als
Dim Parse_wd(8) As String * 16 definiert. Trotz der Beschränkung auf 16 Byte lange Strings kann ich auch längere Strings in den Feldvariablen speichern. Wo liegt der Fehler? Ist das ein Feature oder ein Bug?

Anbei ein Auszug aus dem Programm, danke für die Antwort!

snafu


'variablen für den parser
Dim Parser_string_len As Byte
Dim Parser_split_pointer As Byte
Dim Parse_wd(8) As String * 16
Dim Parse_wd_counter As Byte

[...]

'-------------- parse input string
For Parse_wd_counter = 1 To 8

'find first blank char
Parser_split_pointer = Instr(parse_string , " ") 'erstes ' ' suchen

If Parser_split_pointer > 0 Then '= 0 if no blank found
Parser_split_pointer = Parser_split_pointer - 1
End If

'isolate first parse word
Parse_wd(parse_wd_counter) = Mid(parse_string , 1 , Parser_split_pointer)

Frank
08.04.2011, 14:49
Bascom überwacht nicht die Feldlängen. Wenn du nur 8 Bytes reservierst, musst du auch selbst darauf achten das du das nicht überschreitest. Ansonsten überschreibst du mit überlängen entweder andere Variablen oder Dimensionen was üble Folgen für das Programm haben kann.
Fehler ist das keiner, aber als Feature würde ich es auch nicht unbedingt bezeichnen ;-)

snafu
08.04.2011, 18:01
Oh! Danke für die Antwort. Ist das bei normalen Stringvariablen auch so? Ich wähnte mich immer ganz sicher in des Compilers Schoß, da muss ich ja richtig aufpassen!

for_ro
08.04.2011, 18:57
Während der Laufzeit wird nichts überprüft. Das wäre ziemlich aufwändig.
Und das kann dir bei jeder Art Variable passieren, deren Größe nicht von Anfang an fest vorgegeben ist. Also bei Strings und Arrays.
Der Compiler kann nur Konstanten überprüfen. Selbst wenn du Konstanten an Variablen zuweist und diese dann zu einem String zusammenbaust, gibt dir der Compiler keine Fehlermeldung.
Das gleiche gilt für Arrays. Wenn du Elemente verwendest, die außerhalb deiner Deklaration liegen, wird das auch nicht festgestellt.

snafu
08.04.2011, 19:58
Danke für deine ausführliche Antwort - das war mir nicht klar. Dann wundert es mich umso mehr, wie oft meine Programme funktionieren ;)

BTW: Ich bin immer wieder über den freundlichen Ton und die guten Antworten in diesem Forum überrascht, so auch in diesem Fall. Tnx!