2009-08-05 3 views
0

동적 배열의 길이를 문자열로 변환하고 길이를 묻는 함수를 작성했습니다 (trim (string)). 제목에 명시된 바와 같이잘못된 유형 : 'Array'및 'dynamic array'

ShowMessage(IntToStr(arraylength(cChar))); 

내가 오류를 얻을 : 내 주요 프로그램에서

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; 

로 변환 할 문자열에 텍스트를 읽어 보시기 바랍니다.

+3

나머지 코드는 매우 손상되었습니다. 배열의 기본 인덱스는 0입니다. 문자열의 기본 주소는 하나입니다. 문자열이나 배열에는 SetLength를 호출 할 때까지 아무 것도 포함되어 있지 않습니다. 루프 밖에서's' 길이를 확인해야합니다. 그렇지 않으면 함수가 값을 반환하지 않을 수도 있다는 경고를 받아야합니다. 왜 당신이 문자열을 배열로 바꾸는가? 다음에 할 일이 문자열로 다시 채워지는 경우라면? –

+1

* StrLen() * 및 유사한 기능을 살펴보십시오. 왜 처음에는 * PChar *를 사용하지 않습니까? – mghie

답변

4

델파이의 프로 시저와 함수에 배열을 전달할 때는 별도의 형식으로 선언해야합니다. 따라서 :

type 
    MyArray = array of char; 

다음

function arraylength(a: MyArray): integer; 

BTW : 당신은 왜 길이와 같은 내장 함수를 사용하지 않는()? Delphi2009에서 type string은 유니 코드 문자열이므로 Length는 바이트가 아닌 길이를 문자로 나타냅니다.

+0

이 경우 동적 배열이 있고 길이 (cChar)가 동적 할당 공간 때문에 배열의 실제 문자 수보다 큰 값을 반환하기 때문에 Im을 사용하지 않습니다. 나에게 문자의 실제 카운트를 제공하는 함수는 매우 감사하겠습니다. – Acron

+0

당신은 20 개 요소의 배열을 가지고 있으며, 당신은 지금 15 개만을 사용한다는 것을 의미합니까? – smok1

+0

그건 사실입니다. – Acron