2017-08-30 36 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

相关问题