Zitat von
BloodySmartie:
Okay, also mal anders:
Delphi-Quellcode:
var
s:string;
a:array of char[2];
begin
a[0]:='1';
a[1]:='1';
s:=getStringfromCharArr(a);
//s enhält an dieser Stelle '11'
//weiter...
a[0]:='2';
a[1]:='2';
s:=getStringfromCharArr(a);
//Ich hätte nun erwartetn, dass in s '22' steht. - "Neuer Funktionsaufruf, neues Glück."
//Stattdessen steht darin aber '1122'.
end.
Vielleicht isses jetzt besser verständlich.
Schau dir das doch mal im Debugger in der CPU-Ansicht an.
Wenn der Rückgabewert einer Funktion ein String ist, dann wird der Funktion beim Aufruf die Adresse, an der das Ergebnis der Funktion gespeichert werden soll, mitgegeben. Result ist in diesem Fall also nicht eine lokale Variable der aufgerufenen Funktion, sondern eine Variable der aufrufenden Funktion/Prozedur.
Im Prinzip ist das so, als würdest du getStringfromCharArr nicht als Funktion deklarieren sondern als Prozedur mit einem var-Parameter für das Ergebnis, also :
Delphi-Quellcode:
Procedure getStringfromCharArr(ca:array of char: var result:string);
var i,l:integer;
begin
// result:=''; ---Problemlösung :)
l:=length(ca);
for I := 0 to l - 1 do begin
result:=result+string(ca[i]);
end;
end;