Hallo!
Ich musste leider feststellen, dass das Ergebnis, welches von der chr()-Funktion zurückgeliefert ist, nicht immer sicher ist.
Das Zeichen, das zurückgeliefert wird, ist nicht null-Terminiert. D.h. unter Umständen können auch mal mehr Zeichen zurückgeliefert werden.
Und zwar genau dann, wenn im Speicher hinter dem eigentlichen Zeichen keine Null steht. Es werden dann soviele Zeichen zurückgeliefert, bis das
nächste Null-Zeichen kommt, oder der String überläuft (Standard: 80 Zeichen).
Das ist nicht so doll!
Originalfunktion CHR():
================
FUNCTION CHR : STRING
VAR_INPUT
C : BYTE;
END_VAR
VAR
PT : POINTER TO BYTE;
END_VAR
PT := ADR(CHR);
PT^ := C;
Mein Vorschlag:
============
FUNCTION CHR : STRING
VAR_INPUT
C : BYTE;
END_VAR
VAR
PT : POINTER TO BYTE;
END_VAR
PT := ADR(chr);
PT^ := C;
PT:=PT+SIZEOF(PT^);
PT^:= 0;
Damit wird das darauffolgende Zeichen null-terminiert und es ist sichergestellt, dass auch nur 1 Zeichen zurückgeliefert wird.
Bitte die Funktion CHR() entsprechend abändern. Mein Vorschlag darf gerne übernommen werden oder verändert werden.
Viele Grüße,
riedel2