【发布时间】:2011-03-15 12:22:47
【问题描述】:
寻找如何抑制来自编译器的警告说可能的数据丢失,
st:= copy(str,0,2);
其中 st 是 string[2] 并且 str 有超过 2 个字符。
并且复制被定义为 from str 返回一个新字符串,该字符串是 0 , 2 个位置的子集。
【问题讨论】:
标签: string delphi casting delphi-2009
寻找如何抑制来自编译器的警告说可能的数据丢失,
st:= copy(str,0,2);
其中 st 是 string[2] 并且 str 有超过 2 个字符。
并且复制被定义为 from str 返回一个新字符串,该字符串是 0 , 2 个位置的子集。
【问题讨论】:
标签: string delphi casting delphi-2009
这将抑制警告,但请注意潜在问题仍然存在:从 Unicode 转换为 AnsiString 可能会导致数据丢失。
st := ShortString(Copy(str,1,2));
别忘了 Delphi 的字符串是从 1 开始的,字符串中的第一个字符是 1,而不是 0。
【讨论】:
string 到 string[2]。在 Delphi 2009 中,标准 string 是 Unicode(感谢上帝!),但 string[2] 是所谓的 ShortString,它不是 Unicode,每个字符只有一个字节。所以st 不能保存例如字符串∰∂,即使它只包含两个字符。
如果你只是写:
st := shortstring(str);
编译器将为您完成工作。
它将剪切str 的内容以适应st 的最大长度。所以如果st 被定义为st: string[2]; if 将只检索str 的前两个字符。
但你可能会在 str 中丢失非 ascii 编码的字符(如果它只包含英文文本,这不是问题)。
【讨论】:
你用错了你必须做的:
st:= copy(str,1,2);
【讨论】: