C++ _bstr\u t到char指针并调用atof(…)

C++ _bstr\u t到char指针并调用atof(…),c++,com,C++,Com,此代码是否不会产生错误: _bstr_t text=n.GetText(); atof((char*)text) 其中文本为双值 我知道\u bstr\t在转换过程中产生常量字符*;因此,我不确定atof()。然后,这个操作符调用返回一个堆分配的字符数组,您需要delete[](参见链接文章中的示例),否则将导致内存泄漏。最后,您应该意识到,\bstr\t可以封装与空字符串相对应的空指针,并且您的程序应该处理此类情况。在我看来,使用\u wtof(text)(请参阅)进行所需的转换是绝对安

此代码是否不会产生错误:

_bstr_t text=n.GetText();

 atof((char*)text)
其中文本为双值


我知道
\u bstr\t
在转换过程中产生
常量字符*
;因此,我不确定
atof()。然后,这个操作符调用返回一个堆分配的字符数组,您需要
delete[]
(参见链接文章中的示例),否则将导致内存泄漏。最后,您应该意识到,
\bstr\t
可以封装与空字符串相对应的空指针,并且您的程序应该处理此类情况。

在我看来,使用
\u wtof(text)
(请参阅)进行所需的转换是绝对安全的

@锐齿:通常情况下,
BSTR
数据不能总是以零结尾的字符串。但对应于
\bstr\t
类的描述(请参阅):

对象封装了bstr 数据类型。该类管理资源 通过 对SysAllocString和SysAllocString的函数调用 SysFreeString和其他BSTR API 合适


只有通过SysAlloc函数分配的数据(如
SysAllocString
)才能以零结尾。函数
SysAllocString
始终分配额外的两个字节,并在其中填充L'\0'。要阅读有关此主题的更多信息,请参阅。

GetText是否返回BSTR?如果不是,这是一种非常迂回的方法。为什么不
lpcwstrtext=n.GetText()
并使用
\u wtof(text)
,保存转换?如果是这样的话,那么你拥有BSTR,这会正确地破坏它吗?我不记得了,但我猜你需要括号构造函数或附加来完成。但是为什么要转换呢?为什么不在原始BSTR上使用
\u wtof
?我不介意。但是无论如何检查空BSTR是必要的;您不应该自己释放内存。@Luke:我已经查看了SDK头,看到它调用了convertbstrotstring()。YMMV.@sharptooth:我不反对,但是内存是通过内部类数据来管理的。此外,关于bstr_t运算符的文档没有提到释放内存的任何内容。如果你自己释放它,你最终会加倍释放@Rup:这有点危险,因为BSTR不能保证以NULL结尾,实际上可能包含嵌入的NULL。然而,在实践中,_bstr_t通常用于包装以NULL结尾的字符串(我认为它显式地以NULL结尾,尽管我不是100%肯定)。