begin process at 2008 07 06 12:56:09
1 205 545 membres
122 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COPIER LE CONTENU D'UN POINTEUR VERS UN AUTRE AVEC REDIMENTIONNEMENT AUTOMATIQUE


Information sur la source

Catégorie :Astuces Niveau : Initié Date de création : 05/03/2003 Date de mise à jour : 05/03/2003 10:44:59 Vu : 1 276

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Vous avez certainnement rencontré un jour un problème de redimensionnement de pointeur:
vous voulez copier des caractères vers un ptr, mais la taille allouée est trop petite
=> delete puis new. C'est quand même lourd à écrire à chaque fois
=> voici la solution
Cette fonction redimensionne automatiquement le pointeur si il est trop petit. C'est beaucoup plus propre puisque ca supprime tout l'espace alloue.

Source

  • char *Redim(char **Ch1,const char *Ch2) // redimension automatique
  • {
  • if(strlen(*Ch1) < strlen(Ch2))
  • {
  • delete[] *Ch1;
  • *Ch1=new char[strlen(Ch2)+1];
  • }
  • strcpy(*Ch1,Ch2);
  • return *Ch1;
  • }
char *Redim(char **Ch1,const char *Ch2) // redimension automatique
{
if(strlen(*Ch1) < strlen(Ch2))
  {
  delete[] *Ch1;
  *Ch1=new char[strlen(Ch2)+1];
  }
strcpy(*Ch1,Ch2);
return *Ch1;
} 

Conclusion

C'est du niveau 2: on travaille avec un pointeur de pointeur !!

Je vous garantis, c'est hyper utile pour simplifier l'écriture de ses applis. Je l'utilise tout le temps (et ce n'est pas du narcissisme)

Questions, commentaires, ... comme d'hab, laissez un message
  • signaler à un administrateur
    Commentaire de vieuxLion le 05/03/2003 10:05:21

    bonne idée mais ...
    des fautes ...
    et des avertissements à donner aux utilisateurs de la fonction !

    on libère la mémoire allouée par new[] en utilisant delete[]... pas delete
    Avertir les utilisateurs d'utiliser la fonction UNIQUEMENT si le premier pointeur a été alloué sur le tas (par new) et non pas sur la pile ou l'allocation statique : sinon TRAP)
    C'est bien d'avoir pensé à l'optimisation ... si longueur suffisante, pas de delete[]/new[]
    Dire aussi que le return est du "confort", non nécessaire.
    Tu aurais pû utiliser une référence de pointeur plutôt qu'un double pointeur car c'est plus simple à l'appel :
    void Redim2(char *&pCh1,const char *pCh2)
    {
    if(strlen(pCh1) &lt; strlen(pCh2))
        {   delete []pCh1;
    pCh1=new char[strlen(pCh2)+1];
        }
    strcpy(pCh1,pCh2);
    }

  • signaler à un administrateur
    Commentaire de superpa le 05/03/2003 10:37:14

    Ok, thanks pour les améliorations.
    1 précision:
    return la destination peut s'avérer utile: ca permet de recopier en série redim(&p1,redim(&p2,redim(&p3,p4)));
    et ca s'inscrit dans la lignée de strcpy.
    Encore merci

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS