2009-08-05 43 views
0

我寫了一個函數,它通過將其轉換爲字符串並詢問長度(trim(string))給出了動態數組的長度。無效的類型:'Array'和'dynamic array'

function arraylength(a: array of char): integer; 
var i: integer; 
s: string; 
begin 
    for i:=0 to high(a) do 
    begin 
    s[i] := a[i-1]; 
    Result := length(trim(s)); 
    end; 
end; 

在我的主程序中,我讀的文字轉換成字符串,將其轉換爲陣列

procedure TForm1.Button2Click(Sender: TObject); 
var i: integer; 
begin 
    for i:=0 to length(sString) do 
    begin 
    cChar[i] := sString[i]; 
    end; 
end; 

做:

ShowMessage(IntToStr(arraylength(cChar))); 

我得到的錯誤,如標題所述。

+3

其餘的代碼非常壞。數組的基礎指數爲零。字符串的基地址是一個。除非調用SetLength,否則字符串和數組都不包含任何內容。你應該檢查循環外`s`的長度;否則,你應該得到一個警告,說明這個函數可能不會返回一個值。任何爲什麼你將字符串轉換爲數組,如果接下來的事情是把它重新寫回字符串? – 2009-08-05 13:34:45

+1

調查* StrLen()*和類似的功能。你爲什麼不首先使用* PChar *? – mghie 2009-08-05 13:41:13

回答

4

將數組傳遞給delphi中的過程和函數時,應該將它們聲明爲單獨的類型。因此:

type 
    MyArray = array of char; 

然後

function arraylength(a: MyArray): integer; 

BTW:你爲什麼不使用內置的功能,如長度()?在Delphi2009中,類型字符串是unicode字符串,所以Length返回字符長度,而不是字節。