2017-08-30 37 views
-2

爲什麼SetLength(Result, Length(AValue));給Result一個值?爲什麼Setlength給Result一個值? (delphi)

在德爾福幫助我沒有讀任何關於該setlength給結果的值。

這是我使用的函數。

function StripNonAlphaNumeric(const AValue: string): string; 
var 
    SrcPtr, DestPtr: PChar; 
begin 
    SrcPtr := PChar(AValue); // 
    SetLength(Result, Length(AValue)); // i set your length, but not your value, why do you have a value ? 
    DestPtr := PChar(Result); 
    while SrcPtr <> #0 do begin 
    if SrcPtr[0] in ['0'..'9','A'..'Z','a'..'z','?','.','>','<','+','-','~','!','@','#','$','%','&', 
        '*','(',')','_','=','{','}','[',']','|','\','/',':',';',' '] then 
    begin 
     DestPtr[0] := SrcPtr[0]; 
     Inc(DestPtr); 
    end; 
    Inc(SrcPtr); 
    end; 
    SetLength(Result, DestPtr - PChar(Result)); 
end; 
+0

字符串實際上是一組動態字符。將'SetLength'調用到字符串與在動態數組上調用它沒有任何區別。在這兩種情況下,它都會設置該值的長度(如其名稱所示)。哪些數據駐留在每個數組元素中都由您來初始化。 'nil'和'0'肯定是可能的值。 –

+1

您是否考慮過將代碼降低到最低程度,以便您(我們)能夠專注於問題/問題? – CWBudde

+4

它完全按照文檔(來自System.SetLength()')的幫助)工作:*對於長字符串變量,SetLength將由S引用的字符串重新分配給定長度。保留字符串中現有的字符,但新分配的空間內容未定義。*注意:*對於動態數組變量,SetLength將S引用的數組重新分配給定長度。數組中的現有元素被保留,新分配的空間被設置爲0或nil。* –

回答

6

Result變量總是有一個值。除非你在抽象中談論Delphi語言,否則變量的本質就是始終具有價值。

SetLength在這種情況下變化的值。 Result作爲長度爲零的字符串開始,併成爲長度爲Length(AValue)的字符串。儘管如此,這些值都是,都是值。長度爲部分的值爲。一個字符串不能有一個沒有值的長度。

SetLength可能會或可能不會定義字符串中的字符的值。他們可能是#0,或者他們可能是未定義的 - 我不記得,這並不重要。在任何情況下,字符都具有的值,即使它們沒有定義。

+0

謝謝你的回答。 – gemy

相關問題