此代码是否会产生错误:
_bstr_t text=n.GetText();
atof((char*)text)
其中text是double值。
我知道_bstr_t
在转换中产生const char*
;所以我不确定atof()
是否会起作用?
答案 0 :(得分:1)
首先,_bstr_t
有operator char*() const
,因此您不需要演员。然后,此运算符调用ConvertBSTRToString(),它将稍后返回需要delete[]
的堆分配的char数组(请参阅链接文章中的示例),否则将导致内存泄漏。最后,您应该知道_bstr_t
可以封装对应于空字符串的空指针,并且您的程序应该处理这种情况。
答案 1 :(得分:1)
在我看来,使用_wtof(text)
(请参阅http://msdn.microsoft.com/en-us/library/hc25t012.aspx)进行转换是绝对安全的。
@sharptooth:一般来说BSTR
数据不能总是以零结尾的字符串。但对应于_bstr_t
类的说明(请参阅http://msdn.microsoft.com/en-us/library/zthfhkd6.aspx):
_bstr_t对象封装了BSTR 数据类型。该类管理资源 分配和解除分配 函数调用SysAllocString和 SysFreeString和其他BSTR API何时 合适的。
只有使用除SysAllocString
以外的SysAlloc函数分配的数据才能以零终止。函数SysAllocString
总是分配额外的两个字节,并用L'\ 0'填充。要阅读有关此主题的更多信息,请参阅http://blogs.msdn.com/b/ericlippert/archive/2003/09/12/52976.aspx。