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 !

STRCAT DE PLUSIEUR CHAINES EN UNE FONCTION


Information sur la source

Catégorie :.Net Niveau : Débutant Date de création : 14/06/2003 Date de mise à jour : 14/06/2003 08:24:13 Vu : 1 404

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Une fonction remplace plein d'strcat.
 

Source

  • #include <stdio.h>
  • #include <conio.h>
  • #include <stdarg.h>
  • #include <string.h>
  • // ---------------------------------------------------------
  • // Fais des 'strcat' a la suite sur la chaine 'pOut'
  • // Les chaines ajoutees sont passees en argument
  • // La derniere chaine doit etre '""' (vide)
  • // Retourne le nombre de chaine ajoutees
  • int myStrcat(char *pOut,...)
  • {
  • va_list listStringToAdd;
  • int nbStringAdded;
  • // initialisation
  • va_start(listStringToAdd,pOut);
  • nbStringAdded = 0;
  • // on commence a balayer toutes les chaines jusqu'a ""
  • do
  • {
  • char *stringToAdd;
  • // on obtient la chaine a ajouter
  • stringToAdd = va_arg(listStringToAdd,char *);
  • // si l'on doit arreter
  • if(*stringToAdd == '\0')
  • {
  • break;
  • }
  • // on l'ajoute
  • strcat(pOut,stringToAdd);
  • nbStringAdded ++;
  • }while(1);
  • // on referme gentillement
  • va_end(listStringToAdd);
  • return nbStringAdded;
  • }
  • // ---------------------------------------------------------
  • int main(int argc,char **argv)
  • {
  • char buf[256] = "Coucou ici la premiere chaine\n";
  • int i;
  • i = myStrcat(buf,
  • "--- AJOUTS ---\n",
  • "hello world\n",
  • "vive la programmation en C/C++ !\n",
  • "www.cppfrance.com\n",
  • "--- FIN ---\n",
  • ""
  • );
  • printf("\n%d chaine(s) ajoutee(s)\n\n%s\n",i,buf);
  • getch();
  • return 0;
  • }
#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
#include <string.h>
// ---------------------------------------------------------
// Fais des 'strcat' a la suite sur la chaine 'pOut'
// Les chaines ajoutees sont passees en argument
// La derniere chaine doit etre '""' (vide)
// Retourne le nombre de chaine ajoutees
int myStrcat(char *pOut,...)
{
va_list listStringToAdd;
int     nbStringAdded;
// initialisation
va_start(listStringToAdd,pOut);
nbStringAdded = 0;
// on commence a balayer toutes les chaines jusqu'a ""
do
  {
  char *stringToAdd;
  // on obtient la chaine a ajouter
  stringToAdd = va_arg(listStringToAdd,char *);
  // si l'on doit arreter
  if(*stringToAdd == '\0')
    {
    break;
    }
  // on l'ajoute
  strcat(pOut,stringToAdd);
  nbStringAdded ++;
  }while(1);
// on referme gentillement
va_end(listStringToAdd);
return nbStringAdded;
}
// ---------------------------------------------------------
int main(int argc,char **argv)
{
char buf[256] = "Coucou ici la premiere chaine\n";
int  i;

i = myStrcat(buf,
                  "--- AJOUTS ---\n",
                  "hello world\n",
                  "vive la programmation en C/C++ !\n",
                  "www.cppfrance.com\n",
                  "--- FIN ---\n",
                  ""
                  );
printf("\n%d chaine(s) ajoutee(s)\n\n%s\n",i,buf);

getch();
return 0;
} 

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 14/06/2003 10:57:49 administrateur CS

Salut,
interessant pour les debutants au niveau du va_list, par contre faudrait leur preciser que  l'exemple fournit est mortel pour les perfs.
ciao...

signaler à un administrateur
Commentaire de NitRic le 15/06/2003 05:39:44

sprintf(buffer, "%s%s%s%s%s", buffer, chaine1, chaine2, chaine3, chaine4);

génial le strcat() de plusieurs chaines nah!? une ligne ... et ben ...
Bon exemple quand même, moi perso je préfère sprintf()  ;)



~(.::  NitRic  ::.)~

signaler à un administrateur
Commentaire de JCDjcd le 15/06/2003 10:25:46

Tout a fais d'accord !
Une precision : tu mais deux fois 'buffer' en argument, cela peut des fois est tres maladroit de ta part !

Et le but de cet exemple est de voir aussi les '...' va_list (ect) !

signaler à un administrateur
Commentaire de NitRic le 15/06/2003 14:55:56

Certe, c'est pour ca que j'ai dit: Bon exemple quand même, moi perso je préfère sprintf()  ;)


;)


@++;

signaler à un administrateur
Commentaire de CCJ le 29/09/2005 20:53:09

moi je prefere strcat parceque c'est plus facile d'exploter une string avec une fonction que pleins de variables!!
aller 7/10 ;)

signaler à un administrateur
Commentaire de CCJ le 29/09/2005 20:53:30

euh g mit 8 ;)

signaler à un administrateur
Commentaire de ordiman85 le 08/05/2006 17:26:31

Je trouve ce code très intéressant...
myStrcat(buffer, chaine1, chaine2, chaine3, chaine4, "");
est un peu plus court que :

sprintf(buffer, "%s%s%s%s%s", buffer, chaine1, chaine2, chaine3, chaine4);

Il doit quand même y avoir un moyen de raccourcir et d'accélérer cette fonction

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.