De l'api wincrypt je reçois un * void pointant vers un char *. Ce caractère * pointe vers le début d'un caractère []. Je reçois également un void*
pointant vers un int avec la taille du char*
.convertir void * pointant en char * en une chaîne std :: en C++
En ce qui concerne pvData et cbData j'ai la documentation suivante de Microsoft.
Type de données de pvData: Un pointeur vers un tableau de valeurs BYTE. La taille de ce tableau est spécifiée dans le paramètre cbData. Renvoie une chaîne de caractères Unicode à terminaison nulle contenant le nom d'affichage du certificat.
Je veux convertir ce void*
à un std::string
mais jusqu'à présent, tout ce que je reçois lors de la sortie de mon std::string
est le premier caractère.
J'ai lu: Converting a void* to a std::string mais depuis mon void*
pointe vers un char*
au lieu de la std::string
static_cast
dans la réponse acceptée échoue et le retour std::string*
déclenche une exception de pointeur NULL.
Jusqu'à présent, je donne les résultats suivants:
// 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
J'ai aussi essayé
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
Vérifiez les arguments passés à 'std :: string :: assign'. – juanchopanza
* "Ce char \ * est un char []" * Qu'est-ce que ça veut dire? –
Et si vous lancez int * en int vous avez UB (ou une valeur inattendue, au mieux). C'est * cbData –