Économiser de la mémoire de l'adresse d'un pointeur
Je dois implémenter une fonction qui retourne l'adresse mémoire d'un pointeur lorsque j'allouer avec malloc()
. Je sais que malloc(value)
alloue une zone sur le tas qui est de la taille value
.
Je sais comment mettre en œuvre le code pour l'impression de la mémoire l'adresse de ce pointeur:
void *s = malloc (size)
printf("%p\n",s);
Ma question est, comment puis-je enregistrer la valeur imprimée par ce code dans un int ou string? Je Peux? Je suis désolé si c'est une question stupide...
Qu'allez-vous faire? Voulez-vous simplement la chaîne de caractères à des fins d'impression? C'est juste un char tableau comme n'importe quelle autre chaîne. Ou essayez-vous de stocker la valeur du pointeur lui-même? C'est juste
s
.OriginalL'auteur horro | 2013-12-05
Vous devez vous connecter pour publier un commentaire.
Stockage de la valeur du pointeur (c'est à dire l'emplacement de la mémoire d'une variable) dans une chaîne de caractères qui peut être fait comme vous l'avez utilisé printf:
Pour "sauver" la valeur en un entier (type) vous pouvez faire un simple cast:
Depuis en c, vous ne savez jamais ce que votre machine de l'adresse du pointeur de la longueur, ce (techniquement) n'est pas garanti de fonctionner tout à fait raison; ces deux méthodes peuvent mal se passer avec loufoques les architectures ou les compilateurs.
buf
pas exister une fois que la fonction retourne.Oui.. mais c'est un peu pédant. Markos Horro Varela ne demande pas que la qualité.
Je pensais que la question a commencé avec "je mettre en place un la fonction qui retourne l'adresse mémoire d'un pointeur quand je le répartir avec malloc()." Nous avons interprété différemment, évidemment.
+1 pour "size_t'. Nous sommes le portage vers Windows 10 UWP application dans VisualStudio 2015 et " int " n'était pas de la compilation!
OriginalL'auteur Rooke
ensuite, vous pouvez l'imprimer:
OriginalL'auteur ouah
Vous l'ai déjà sauvé la valeur comme une séquence de bits en s, donc je suppose que vous voulez dire que vous voulez simplement le texte de sortie de printf comme une chaîne de caractères. L'appel que vous voulez est sprintf:
OriginalL'auteur Tony K.
Si vous voulez l'adresse de pointeur retourné à partir de votre fonction, vous pouvez déclarer votre fonction pour renvoyer le type de pointeur:
C'est une alternative à l'utilisation de
sprintf
comme l'a suggéré (très raisonnable) par d'autres réponses.Faire votre choix.
Noter que sur certains systèmes, une
int
ne serait pas assez grand pour contenir unint*
de type de données à l'aide deint*
n'est pas seulement claire, mais plus sûr.OriginalL'auteur Floris
Oui sprintf() est la meilleure option. Ici, vous pouvez tout simplement prendre quelque chose à l'intérieur d'une chaîne.
OriginalL'auteur asifaftab87