【发布时间】:2016-12-28 08:24:07
【问题描述】:
从 wincrypt api 我收到一个指向 char* 的 void*。
此 char* 指向 char[] 的开头。我还收到了一个void* 指向一个大小为char* 的int。
关于 pvData 和 cbData 我有以下来自 Microsoft 的文档。
pvData 的数据类型:指向 BYTE 值数组的指针。此数组的大小在 cbData 参数中指定。返回一个以 null 结尾的 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的参数。 -
"This char* is a char[]" 这到底是什么意思?
-
如果你将 int* 转换为 int 你有 UB(或者一个意外的值,充其量)。它是 *cbData
-
去白板写100遍:“数组不是指针,指针也不是数组”。
-
“我还收到一个指向 int 的 void*...” - 然后你需要将其转换为
int*而不是int。
标签: c++ string void-pointers