IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

copie / affectation


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut copie / affectation
    Bonjour,
    j'aimerais savoir quand doit - on utiliser une fonction de copie mémoire ( memcpy par exple ) au lieu d'une affectation. Je développe une simple appli client serveur en C.

    Dans mon cas, j'ai une structure data qui contienne des BIGNUM ( grands nombres )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct data {
     BIGNUM *prime;
     BIGNUM *gen;
     ...
    }
    Cette structure est "encapsulée" dans une autre structure contenant entre autre un descripteur de socket.

    Mon but est d'initialiser prime et gen,

    Est ce que je devrais faire 1) ou 2)

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BIGNUM *nbprem = BN_bin2bn(...);
    monData->prime = nbprem;
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BIGNUM *nbprem = BN_bin2bn(...);
    memcpy(monData->prime, nbprem, BN_num_bytes(nbprem));//En supposant qu' il y ait suffisamment d'espace mémoire alloué pour monData->prime
    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Ta deuxième forme n'a d'intérêt que si 'prime' a été initialisé avant. Si c'est la première affectation, la première est préférable.
    Et encore, il vaut sûrement mieux libérer ton pointeur 'prime' et affecter directement le nouveau pointeur à 'prime'.
    Plus tu pédales moins fort, moins t'avances plus vite.

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    Dans 2) j'aimerais utiliser BN_copy( ) au lieu de memcpy. voici le prototype de la fonction :
    http://www.openssl.org/docs/crypto/BN_copy.html

    BIGNUM *BN_copy(BIGNUM *to, const BIGNUM *from);

    il n'explique pas dans la doc à quoi sert le BIGNUM ( en rouge ) retourné par BN_copy...
    Comment tester par exemple si BN_copy( ) n'a pas échoué ...
    Je ne sais pas si les gens, en lisant le prototype de la fonction, comprennent de suite ce que signifie BIGNUM*

    Pourquoi n'a - ton tout simplement pas int BN_copy( BIGNUM *to, const BIGNUM *from);

    par exemple.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Comment tester par exemple si BN_copy( ) n'a pas échoué ...
    euh... t'as bien lu la page ? C'est écrit :
    BN_copy() returns "to" on success, NULL on error
    "to", c'est le premier argument de la fonction.

  5. #5
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut
    D'acc. et BIGNUM* sert à quoi sinon ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    C'est un pointeur sur BIGNUM (BIGNUM étant le typedef d'une structure). Si la fonction renvoie, en cas de succès, le premier argument, qui est un pointeur sur BIGNUM, il faut bien que le type de retour soit identique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BIGNUM * BN_copy(BIGNUM * to, const BIGNUM *from);
    = = = = = = =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     typedef struct bignum_st BIGNUM;
     
     struct bignum_st
            {
            BN_ULONG *d;    /* Pointer to an array of 'BN_BITS2' bit chunks. */
            int top;        /* Index of last used d +1. */
            /* The next are internal book keeping for bn_expand. */
            int dmax;       /* Size of the d array. */
            int neg;        /* one if the number is negative */
            int flags;
            };
    ( http://www.openssl.org/docs/crypto/b...GNUM_structure )

Discussions similaires

  1. Copie, affectation, et pointeurs
    Par progcyb dans le forum Débuter
    Réponses: 23
    Dernier message: 16/04/2014, 13h39
  2. Réponses: 96
    Dernier message: 08/04/2013, 11h54
  3. Réponses: 9
    Dernier message: 31/03/2011, 16h32
  4. Constructeur de copie, et opérateur d'affectation.
    Par Invité dans le forum Débuter
    Réponses: 49
    Dernier message: 03/04/2010, 13h13
  5. [débutant] affectation et copie
    Par Faiche dans le forum Langage
    Réponses: 1
    Dernier message: 06/12/2006, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo