begin process at 2012 05 27 14:59:47
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Niveau :Initié Date de création :05/03/2003 Date de mise à jour :05/03/2003 10:44:59 Vu :2 272

Auteur : superpa

Ecrire un message privé
Site perso
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


 Sources du même auteur

Source avec Zip Source avec une capture AFFICHER UNE TEXTURE DE FOND
Source avec Zip Source avec une capture Source .NET (Dotnet) BARRE D'ETAT
Source avec Zip BULLES D'AIDE
MANIPULATEURS A PARAMETRES
RECUPERATION DE ARGC ET ARGV DANS UNE APPLIC GRAPHIQUE

 Sources de la même categorie

Source avec Zip SCHEDULER RR FIFO par yvesB87
Source avec Zip ALGORITHMES RÉCURSIFS VS ALGORITHMES ITÉRATIFS par yvesB87
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70
Source avec Zip Source avec une capture [C++] CLASS REGISTER par Miwik

Commentaires et avis

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);
}

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




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales