VB6字符串转换为char *转换:避免使用null字符

时间:2014-09-27 15:45:32

标签: c string winapi vb6

我实际上使用WideCharToMultiByte函数将VB6字符串转换为C字符串(char *)。一切正常,但如果源字符串包含空字符,那么C字符串将被截断。

例如:

vbString = "Hello " & Chr(0) & " world!"

生成的C字符串为Hello \0。我无法在函数文档中找到任何选项以避免此行为。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

只有在将VB字符串视为以空值终止时才会发生截断。 WideCharToMultiByte()允许您指定实际的字符串长度,因此忽略空值。 VB字符串是COM BSTR字符串,因此您可以使用SysStringLen()获取VB字符串的全长并将其传递给WideCharToMultiByte()

答案 1 :(得分:1)

VB6字符串实际上是一个可以使用BSTR函数或类操作的BSTR:SysStringLen,CComBSTR,SysAllocString等。 CComBSTR甚至可以将其转换为数组。我没有测试,但我相信空字符将被保留。 一旦使用空终止字符串函数,则空字符将被解释为字符串的结尾。