Mettre le resultat d'une fonction comme un paramétre d'entrè dans la même foncti

Résolu
neocol - 3 juin 2013 à 15:18
 neocol - 4 juin 2013 à 17:17
Bonjour,
Je voudrais avoir votre aide, sur un truc que j'arrive pas moi aussi à saisir, si çà existe déjà ou non.

* J'ai une fonction Copier qui retourn un Char* chaine :
char* COPIER(char* bloc, int pas1, int pas2);
- Je copie tous les caractères entre un pas1 et pas2 ( pas1 et pas2 désignons le numero des espaces: bloc = AAA_pas1_BBB CCC_pas2_DDD EEE [ici je vais copier BBB CCC]).
- bloc est une chaine de caractères, les mots de dans sont séparés par des espaces.
* Dans le main : pour récuperer le résultat de la fonction copier,
je fais, exemple : char* chaine = char* COPIER(char* bloc, int pas1, int pas2);

Ce que je veux , est-ce qu'il y a u une possibilté pour que le retour de la fonction copier soit parmi les paramétres d'entrées de la fonction? je m'explique
au lieu de faire :
++ char* chaine = char* COPIER(char* bloc, int pas1, int pas2);
j'aurais un truc comme :
++ COPIER(char* bloc, int pas1, int pas2, char* chaine);
c-à-d le résultat va être directement stocké dans chaine,
et sa veut dire dans le main , je directement écrire :
COPIER(char* bloc, int pas1, int pas2, char* chaine); ?

J'en ai besoin pour mon travail.Merci

9 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 juin 2013 à 15:52
Bonjour.

Je me permet de joindre un petit exemple, en plus des très claires explications de louis14.

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

void intChange(int* a)
{
  *a = 14;
}

void strChange(char** str)
{
  free(*str);
  *str = malloc(6 * sizeof (char));
  strcpy(*str, "hello");
}

int main()
{
  int nb = 5;
  char* str = NULL;

  printf("Avant: %i\n", nb);
  intChange(&nb);
  printf("Après: %i\n", nb);

  str = malloc(7 * sizeof (char));
  strcpy(str, "coucou");
  printf("Avant: %s\n", str);
  strChange(&str);
  printf("Après: %s\n", str);
  free(str);

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
4 juin 2013 à 09:04
Bonjour,
Dans ton cas il faudrait une fonction de type
COPIER(char* bloc, int pas1, int pas2, char** chaine) et dasn ce cas tu fournis le pointeur de de chaine dont tu auras pris le soin d'allouer à une taille suffisante pour ne pas avoir d'erreur ( pas2-pas1+1, mais attention aux suivants si pas2 et pas 1 change). dasn la fonction, tu affecteras à *chaine ta chaine extraite.

Bon codage

louis
0
Bonjour Louis,

Est-ce que çà existe un tel truc dans langage C( le résultat de la fonction sera comme un paramétre d'entrèe)?
Je te remercie par te réponse rapide, je vais suivre ton chemin.
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
4 juin 2013 à 13:02
Oui ça s'appelle un pointeur.
En général, si on a plusieurs paramètres en sortie de function,
-on passe des pointeurs de variable dans les paramètres de la function. C'est la seule façon de récupérer les données.
Dans ton cas tu alloues
char*  chaine 
et tu le passes en paramètre avec
&chaine

si ta function est définie comme je te l'avais proposé.
-Sinon tu déclares une structure qui contiendra tous les paramètres en sortie de ta fonction. Tu crées la structure dans ta fonction, tu affectes les valeurs et tu la retourne en sortie.

Bon codage

louis
0

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

Posez votre question
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
4 juin 2013 à 15:55
Merci


louis
0
Merci pour votre aide, entrain de tester.je vais vous mettre le résultat, ça va me sauver au boulot.merci encore les gars.
0
MERCI LES GARS , çà a marché nikel. MERCI ENCORE LES GARS. comment je vais faire pour indiquer que c'est résolu?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 juin 2013 à 17:13
Il te suffit de cliquer sur chacun des boutons "Réponse acceptée !", que tu juges pertinent. À partir d'un bouton appuyé, la réponse sera automatiquement marquée comme résolue.

PS: N'écris pas en majuscule, c'est inutile, et très mal vu.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
D'accord, merci pour votre aide et conseil.c'est marqué la bonne réponse.
Cordialement.
Youness MOURTAJI
0
Rejoignez-nous