Besoin d'aide

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 16 juin 2007 à 18:55
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 19 juin 2007 à 22:51
Bonjour,

Je recherche un tutoriel expliquant comment faire une fonction traitant et revoyant une valeur char.
En C.

<hr />

Merci d'avance et à bientôt.

Nico

8 réponses

cs_Adeon Messages postés 293 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 10 avril 2015 2
17 juin 2007 à 00:13
ba... voila une fonction qui transforme le A en B; le B en C....... :

char TaFonction(char CharATraiter)
{
return CharATraiter ++;
}

______________________
Adeon
http://warcrave.com/
0
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
17 juin 2007 à 21:53
Bonjour,

Merci pour cette réponse.

Mais je viens de voir que je m'étais mal expliqué je voulais dire :
Je recherche un tutoriel expliquant comment faire une fonction traitant et revoyant une valeur char[] ou char * (renvoyant une chaîne de caractères).
En C.

<hr />

Merci quand même ça pourra toujours me servir et à bientôt.

Nico
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
18 juin 2007 à 08:28
Un exemple explicite

#include <stdio.h>
#include <string.h>

// cesar
char *foo (char *bar)
{
  char *s = NULL;
  int len, n;
  unsigned char c;

  len = strlen(bar);
  s = malloc(len);

  for (n=0; n<len; n++)
  {
    c = bar[n];
    c+=3;
    if (c>=255) c=0;
    s[n]=c;
    printf("%c -> %c\n", bar[n], s[n]);
  }
  s[n]=0; // chaine terminée par 0

  return s;
}

int main()
{
  char *texte = "le texte";
  char *code  = foo(texte);
  printf("[%s] -> [%s]\n", texte, code);
  free(code); // libère suite au malloc

  getchar();   
  return 0;
}
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
19 juin 2007 à 13:34
On ne renvoi pas un char* ! On peut le faire comme le montre katsankat, mais ce n'est pas "propre". C'est à l'appelant d'allouer la mémoire :

void foo(char* bar, char* res, size_t ressize)

Tu dois allouer ta variable de retour avant d'appeler la fonction, par exemple :

char res[256];
char texte[256];
strcpy(texte, "le texte");

foo(texte, res, sizeof(res));





Passer la taille de res en 3e paramètre permettra a ton fonction de connaitre l'espace disponible dans res, et ainsi de verifier à ne pas taper dans une zone mémoire non allouée.

D@runia
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
19 juin 2007 à 14:34
C'est vrai, ça dépend de ce qu'il veut faire en fait. Un passage par référence est probablement plus judicieux?

getenv() est du même genre:

#include <stdio.h>
#include <stdlib.h>

int main ()
{
char *pPath;
pPath = getenv ("PATH");
if (pPath!=NULL)
printf ("The current path is: %s",pPath);
return 0;
}

0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
19 juin 2007 à 15:15
[file:///D:/temp/normad.hip
]Bien sur, certaines fonctions fonctionne de cette manière. Mais si tu regardes la derniere version de la msdn, tu verras que getenv a été depreciée et remplacée par getenv_s :




errno_t getenv_s(
   size_t *pReturnValue,
   char* buffer,
   size_t sizeInBytes,
   const char *varname
);





Cela n'est pas un hasard si la nouvelle fonction implemente un passage par reference. Les fonctions qui renvoies un pointeur sur le heap sont lentes, peu sures, et oblige a faire un free apres l'appel.

Voir http://msdn2.microsoft.com/en-us/library/ms972816.aspx pour plus d'info.






D@runia
0
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
19 juin 2007 à 21:54
Bonjour,
merci beaucoup pour ces réponses,
je souhaiterai maintenant savoir comment faire une fonction traitant et revoyant un tableau (exemple : char mon_tableau[8][9]).

<hr />

Merci d'avance et à bientôt.

Nico
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
19 juin 2007 à 22:51
Analyser ce code http://www.ai.univ-paris8.fr/~jalb/langimp/sort4.html
Il montre:
1) comment une fonction crée et retourne un tableau à deux dimensions.
   Renseignes-toi au passage sur calloc() et realloc() afin de bien comprendre ce que font ces fonctions.
2) comment modifier un tableau à deux dimensions en le passant par référence à une fonction.

Darunia merci pour l'info. Je dois rester fidèle au C ANSI ou POSIX pour travailler sur windoze et UNIX.
0