_bstr_t к символьному указателю и звонящий atof (…)

Этот код, не собирающийся произвести ошибку:

_bstr_t text=n.GetText();

 atof((char*)text)

Где текст является двойным значением.

Я знаю что _bstr_t производит a const char* в преобразовании; таким образом, я не уверен если atof() движение должно работать?

1
задан Tony The Lion 28 June 2010 в 10:19
поделиться

2 ответа

Во-первых, _bstr_t имеет оператор char*() const, поэтому приведение не нужно. Затем этот оператор вызывает ConvertBSTRToString(), который возвращает выделенный на куче массив char, который нужно удалить[] позже (см. пример в статье по ссылке), если этого не сделать, произойдет утечка памяти. Наконец, вы должны знать, что _bstr_t может инкапсулировать нулевой указатель, который соответствует пустой строке, и ваша программа должна обрабатывать такие ситуации.

1
ответ дан 2 September 2019 в 23:26
поделиться

Мне кажется абсолютно безопасным использовать _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 и других API BSTR, когда это необходимо. когда это необходимо.

Только данные, выделенные с помощью SysAlloc-функций, таких как SysAllocString, могут быть не нулевыми. Функция SysAllocString всегда выделяет дополнительные два байта и заполняет их L'\0'. Для получения более подробной информации по этому вопросу я обращаюсь к http://blogs.msdn.com/b/ericlippert/archive/2003/09/12/52976.aspx.

1
ответ дан 2 September 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: