Из wincrypt api я получаю пустоту *, указывающую на char *. Этот символ * указывает на начало символа char []. Я также получаю void*
, указывающий на int с размером char*
.преобразование void * указание на char * на std :: string в C++
Относительно pvData и cbData У меня есть следующая документация от Microsoft.
Тип данных pvData: указатель на массив значений BYTE. Размер этого массива указан в параметре cbData. Возвращает строку символов Unicode с нулевым символом, которая содержит отображаемое имя для сертификата.
Я хочу, чтобы преобразовать это void*
к std::string
, но до сих пор все, что я получаю при выводе мой std::string
является первым символом.
Я прочитал: Converting a void* to a std::string, но так как мой void*
указывает на char*
вместо std::string
static_cast
в принятом ответе терпит неудачу и возвращается std::string*
триггеры исключения нулевого указателя.
До сих пор у меня есть следующие:
// pvData = void* pointing to char*
// cbData = void* pointing to int*
std::string tempName;
tempName.assign(static_cast<char*>(pvData), static_cast<int*>(cbData));
printf("%S \n", pvData); // entire string is shown
printf("%s \n", tempName.c_str()); // only first character is shown
Я также попытался
tempName = static_cast<char*>(pvData); // only single character returned
tempName.assign(static_cast<char*>(pvData)); // only single character returned
char* arr = static_cast<char*>(pvData);
std::string tempName(arr); // only single character returned empty with printf must
// use std::cout
Проверьте аргументы, переданные в 'std :: string :: assign'. – juanchopanza
* "Этот char \ * является символом char []" * Что это значит? –
И если вы выбрали int * для int, у вас есть UB (или неожиданное значение, в лучшем случае). Это * cbData –