La conversion d'un void* pour un std::string
Après avoir parcouru le web et jouer autour de moi, je n'arrive pas à convertir un void*'s de la cible (qui est une chaîne de caractères) à une std::string. J'ai essayé d'utiliser sprintf(buffer, "%p", *((int *)point));
comme recommandé par cette page pour arriver à une chaîne C, mais en vain. Et malheureusement, oui, je dois utiliser un void*, que c'est ce que SDL utilise dans leur USEREVENT struct.
Le code que j'utilise pour remplir le Userevent, pour ceux que cela intéresse, c'est:
std::string filename = "ResumeButton.png";
SDL_Event button_press;
button_press.type = BUTTON_PRESS;
button_press.user.data1 = &filename;
SDL_PushEvent(&button_press);
Des idées?
EDIT: Merci à tous pour les réponses, j'ai juste besoin de lancer le void* pour un std::string*. Je suis bête. Merci les gars tellement!
- Qu'est-ce que STL, qu'est-ce que USEREVENT dans la STL? C++ n'a pas une telle chose.
- Qu'essayez-vous de faire? Vous avez un void* pointeur qui pointe vers Quoi?
- Je pense qu'il veut dire SDL UserEvent linux.die.net/man/3/sdl_userevent
- Nous montrer le code qui remplit la UserEvent struct.
- vous avez un problème ici. Par le temps que votre gestionnaire s'exécute,
filename
est hors de portée etuser.data1
est pointé à la poubelle. Vous aurez probablement erreur de segmentation (bien qu'il puisse fonctionner comme prévu... pour un temps... jusqu'à ce qu'il segmentation). Regarde ma réponse à voir comment l'en empêcher. - Vous avez tout à fait raison, maintenant que vous le signaler. Merci beaucoup!
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin d'allouer dynamiquement (car il doit probablement survivre à l'étendue que vous utilisez à), puis de le jeter en arrière et en avant:
Basé sur votre commentaire "Ce que je voulais était de convertir ce le void* vers (qui est une chaîne de caractères) dans une chaîne."
En supposant que vous avez ceci:
Vous pouvez les jeter en arrière à la chaîne:
Remarque que c'est à vous de vérifier que
ptr
souligne en fait à unstd::string
. Si vous êtes dans l'erreur et il indique quelque chose d'autre, cela provoque un comportement indéfini.Si vous essayez de format de l'adresse que le texte vous pouvez utiliser un
stringstream
:Si ce n'est pas ce que vous êtes intéressé, merci de préciser votre question.
Si le vide est un const char*, vous pouvez simplement appeler le std::string constructeur avec elle, c'est à dire