2015-11-14 3 views
-4

Supposons que je donne les résultats suivants:Comment trouver un pointeur char unicode dans un pointeur vide?

wchar_t *x = L"myname"; 
void *y = 0; // assume that p is already assigned previously to any given buffer 

Comment puis-je déterminer si le pointeur de char unicode x est à l'intérieur du tampon void * y?

Fondamentalement

Comment puis-je trouver une aiguille dans une botte de foin à condition que la botte de foin est un pointeur vide, et l'aiguille est un pointeur char unicode?

+0

Ce n'est pas parce que 'y' est nul et donc ne pointe nulle part. Je ne pense pas que vous demandiez ce que vous voulez vraiment dire. Comme vous essayez de comprendre si un pointeur pointe dans l'espace mémoire occupé par une chaîne? –

+0

J'ai dit supposer que y est déjà rempli, je l'ai juste défini de sorte qu'aucun troll -1s puis demande "comment se fait-il que vous n'avez même pas définir y"? – Farrell32

+0

Nous ne savons toujours pas ce que vous essayez de faire – pm100

Répondre

1

Si vous connaissez la longueur du tampon en octets, vous pouvez simplement le faire.

#include <stdbool.h> 
char *tmp = x; //you can do byte arithmetic on char*, but not on void* 
bool is_in_buffer = ((char*)y >= tmp && (char*)y < tmp + length); 

puisque vous connaissez la longueur de la mémoire tampon et le tampon est stocké dans la mémoire contiguë, si y est dans les limites de la mémoire tampon, vous savez y est dans la mémoire tampon.

Notez que vous ne pouvez affecter que des pointeurs de type non-char à char et void. Sinon, cela viole la règle stricte d'aliasing, qui est présente dans C99 et C11.

+0

Merci bobby d'avoir fourni une bonne réponse sans causer d'ennuis inutiles comme 95% des gens sur la pile. +1 – Farrell32

+0

Je sais que ça peut être un peu douloureux, mais ils causent des problèmes pour une raison. J'ai dû faire quelques suppositions en répondant à votre question. –

+0

@ Farrell32 Bizarrement, la grande majorité des autres utilisateurs ici ne semblent pas avoir le problème que vous faites. Je me demande pourquoi c'est. –