_bstr_t到char指针并调用atof(...)

时间:2010-06-28 10:19:49

标签: c++ com

此代码是否会产生错误:

_bstr_t text=n.GetText();

 atof((char*)text)

其中text是double值。

我知道_bstr_t在转换中产生const char*;所以我不确定atof()是否会起作用?

2 个答案:

答案 0 :(得分:1)

首先,_bstr_toperator 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