to 张无忌:
ansistring 字符串的序号是从1开始的,因为长字符串没有序号为0的字符.要获取长字符串的实际长度,
只能调用Length().
编译器会自动在ansistring 字符串的最后一个字符后面添加一个null字符(#0), 表示字符串
的结束, 但是, 该null字符本身并不是ansistring字符串的一部分.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
当用Pchar强制把ansistring字符串转换为Pchar类型后, 得到一个指针, 指向ansistring字符串
的第一个字符, 如果原来ansistring是空的,就指向了那个null了. 现在这个null已经成为
ansistring字符串的一部分了(我个人的理解).
当PChar类型使用完毕后, 需要把那个已经成为ansistring字符串一部分的null 重新排除在ansistring
字符串之外(当然,在内存中是存在的,只是不计入ansistring字符串而已) ,这时,就需要用
STRUTILS 单元中的RealizeLength() 函数来恢复.
如设:
S : string;
Setlength(S,256);
GetWindowsDirectory(PChar(S), 256);
RealizeLength(S)
//恢复ansistring字符串S的长度.