razuki a écrit :
Dans la doc, c'est écrit :
Code :
- int BN_bn2bin(const BIGNUM *a, unsigned char *to);
|
BN_bn2bin() converts the absolute value of a into big-endian form and stores it at to. to must point to BN_num_bytes(a) bytes of memory. La doc me demande d'allouer au préalable une memoire qui sera pointée par char *to. La taille de cette mémoire doit faire BN_num_bytes(a) bytes c'est à dire la taille du BIGNUM a. En fait je pense que le dernier caractère dans char *to n'est pas \0. Comme la lib peut rajouter un \0 alors que la taille allouée n'est pas prévue pour un \0 à la fin de char* to ... ? Je suis un peu confus
|
Alors dans ce cas il est effectivement possible que la fonction ne mette pas de \0, tout simplement (j'avais pas lu la doc )
De toutes façons, tu te prends la tête pour rien. Fais un test simple: Alloue un espace mémoire de la taille de ton nombre +1, et fais un memset d'une valeur arbitraire, disons 1 ou 2.
Ensuite exécutes ta fonction, et vois si le dernier octet (en surplus) est nul (0) ou a gardé ta valeur arbitraire. Voilà problème réglé
Mais effectivement de toute façon vu la doc, et vu qu'avec BN_num_bytes tu peux connaître à l'avance la taille de ton nombre simplement (EDIT :Et c'était marqué dans ton post, désolé j'avais pas vu ) (contrairement à ce que j'affirmais plus haut ) ça me semble assez explicite sur le fait qu'il ne met pas de \0.
Message édité par WiiDS le 06-04-2011 à 15:47:00
---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010