Ian*_*dby 8 delphi string null null-terminated pchar
据我所知,在Delphi中,空字符串(AnsiString或WideString)可以用nil指针表示,也可以用指向实际空字符串的指针表示.
通过实验我已经在Delphi XE2中显示了(具有特定的编译器设置)PChar('') <> nil.但这是保证,还是可能在未来的版本中更改,或依赖于某些编译器设置?
我有一种信心危机.如果有人能给我一个明确的答案,我将不胜感激.
Rob*_*edy 10
是.从字符串文字到PChar的类型转换永远不会是空指针.从具有相同字符类型的字符串到PChar的类型转换也不会为空.(字符串到PChar,AnsiString到PAnsiChar等)
但是,向PChar输入其他东西的类型可能为null.(指向PChar的指针,指向PWideChar的AnsiString等)
该文档在String Types主题的Mixing Delphi Strings和Null-Terminated Strings部分中介绍了这一点:
您还可以将UnicodeString或AnsiString字符串转换为以null结尾的字符串.以下规则适用:
- 如果S是UnicodeString,则PChar(S)将S转换为以null结尾的字符串; 它返回一个指向S中第一个字符的指针.这些转换用于Windows API.例如,如果Str1和Str2是UnicodeString,则可以像下面这样调用Win32 API MessageBox函数:MessageBox(0,PChar(Str1),PChar(Str2),MB_OK);. 如果S是AnsiString,请使用PAnsiChar(S).
- 您还可以使用Pointer(S)将字符串转换为无类型指针.但如果S为空,则类型转换为零.
- PChar(S)总是返回一个指向内存块的指针; 如果S为空,则返回指向#0的指针.
- 将UnicodeString或AnsiString变量强制转换为指针时,指针将保持有效,直到为变量分配新值或超出范围.如果将任何其他字符串表达式强制转换为指针,则该指针仅在执行类型转换的语句中有效.
- 将UnicodeString或AnsiString表达式转换为指针时,通常应将指针视为只读.只有满足以下所有条件时,才能安全地使用指针修改字符串:
- 表达式cast是UnicodeString或AnsiString变量.
- 该字符串不为空.
- 该字符串是唯一的 - 即引用计数为1.要保证字符串是唯一的,请调用SetLength,SetString或UniqueString过程.
- 自从进行了类型转换以来,该字符串尚未被修改.
- 修改后的字符都在字符串中.注意不要在指针上使用超出范围的索引.
将WideString值与PWideChar值混合时,适用相同的规则.
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |