pb avec librairie gmp

pb avec librairie gmp - C - Programmation

Marsh Posté le 06-06-2005 à 13:36:33    

nous avons un pb avec des fonctions de la librairie gmp
mpz_import et mpz_export pour le 2eme argument de ces fonctions
Nous devons convertir une chaine de caracteres en un entier  
 
pour plus dinfo sur ces fonctions :
http://www.swox.com/gmp/manual/Int [...] d%20Export
 
c'est assez urgent c pour un projet a rendre demain
 
merci bcp pour laide!!!!

Reply

Marsh Posté le 06-06-2005 à 13:36:33   

Reply

Marsh Posté le 06-06-2005 à 13:46:52    

Ton problème c'est quoi exactement ?
Si c'est simplement la conversion d'une chaîne en entier, regarde du côté de strtol().
 

Reply

Marsh Posté le 06-06-2005 à 13:54:35    

alors en fait c surtout pour le 2eme argument je sais pas comment l'ecrire
voila ce que j'ai
 
char* M;
 mpz_init (message_converted);
 mpz_import(message_converted,(size_t) M.length, 1, 1, 0, 0, M.c_str());
et apparemment le compilateur naime pa mon 2nd membre
 
pareil pour mpz_export
 
la je sais pa du tout koi mettre comme 2nd membre
j'ai essaye ca mais ca compile pa
 
 char* result = (char*)malloc(MM.length);
  string s(result);
  *mpz_export ((void*)result, MM.length(), 1, 1, 0, 0, z);
(sachant que MM ca doit etre la chaine qu'il me retourne et z c mon entier qu'il doit convertir
 
merci!!!

Reply

Marsh Posté le 06-06-2005 à 14:02:34    

Code :
  1. char* M;
  2. mpz_init (message_converted);
  3. mpz_import(message_converted,(size_t) M.length, 1, 1, 0, 0, M.c_str());


 
M étant un pointeur, il n'a pas de "méthode" associée.
M.length() et M.c_str() n'existent pas, et "char *" est un type de base (comme int, ou float, ou n'importe quel autre type de base), ce n'est pas une structure ni **gasp** un objet (pas d'objet en C). Donc pas de type "string", si tu veux utiliser une classe string, il faut faire du C++ (et là, pas de malloc(), mais des new/delete !)
 
Qui plus est, dans ton exemple M n'est pas alloué. Ton pointeur est indéfini, et le comportement de mpz_import le sera tout autant.
 
Donc :
 

Code :
  1. /* c'est a toi de determiner "taille".  
  2.    le +1 sert a stocker le caractere de fin de chaine '\0' */
  3. char* M = malloc((taille+1) * sizeof *M);
  4. if ( M == NULL )
  5. {
  6.    /* M n'est pas alloue, il faut gerer l'erreur */
  7. }
  8. else
  9. {
  10.    /* ici on est sur que M est correctement alloue */
  11.    /* <inserer du code ici qui initialise "M"> */
  12.    mpz_init (message_converted);
  13.    mpz_import(message_converted, strlen(M), 1, 1, 0, 0, M);
  14. }
  15. /* quand on a termine, il faut liberer la memoire allouee avec malloc() */
  16. free(M), M = NULL;


Message édité par Elmoricq le 06-06-2005 à 14:06:33
Reply

Marsh Posté le 06-06-2005 à 17:50:00    

ok je v essayer ca
merci bcp!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed