我实际上使用WideCharToMultiByte
函数将VB6字符串转换为C字符串(char *
)。一切正常,但如果源字符串包含空字符,那么C字符串将被截断。
例如:
vbString = "Hello " & Chr(0) & " world!"
生成的C字符串为Hello \0
。我无法在函数文档中找到任何选项以避免此行为。
有什么想法吗?
答案 0 :(得分:3)
只有在将VB字符串视为以空值终止时才会发生截断。 WideCharToMultiByte()
允许您指定实际的字符串长度,因此忽略空值。 VB字符串是COM BSTR
字符串,因此您可以使用SysStringLen()
获取VB字符串的全长并将其传递给WideCharToMultiByte()
。
答案 1 :(得分:1)
VB6字符串实际上是一个可以使用BSTR函数或类操作的BSTR:SysStringLen,CComBSTR,SysAllocString等。 CComBSTR甚至可以将其转换为数组。我没有测试,但我相信空字符将被保留。 一旦使用空终止字符串函数,则空字符将被解释为字符串的结尾。