我刚刚获得Delphi 2009并且之前已经阅读了一些关于由于切换到Unicode字符串而可能需要的修改的文章.
大多数情况下,提到sizeof(char)不再保证为1.
但是为什么这对于字符串操作会有趣呢?
大多数情况下,提到sizeof(char)不再保证为1.
但是为什么这对于字符串操作会有趣呢?
例如,如果我使用AnsiString:=’Test’并对String(现在是unicode)执行相同操作,那么我得到Length()= 4,这对于两种情况都是正确的.
没有测试它,我确信所有其他字符串操作函数的行为方式相同,并在内部决定参数是unicode字符串还是其他任何东西.
如果我进行字符串操作,为什么我会对char的实际大小感兴趣呢?
(当然,如果我使用字符串作为字符串而不存储任何其他数据)
谢谢你的帮助!
霍尔格
解决方法
使用Unicode SizeOf(SomeChar)<>长度(SomeChar).基本上,字符串的长度小于其字符大小的总和.只要你不假设SizeOf(Char)= 1,或者SizeOf(SomeString [x])= 1(因为两者都是FALSE)或尝试用字符交换字节,那么你应该没有任何麻烦.你正在做任何创意填充字符到Chars或Strings的地方,那么你需要使用AnsiString.
(SizeOf(SomeString)仍然是4,无论长度,因为它本质上是一个带有一些编译器魔法的指针.)