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

- - Dernière réponse :  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
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 144 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
7
0
Merci
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
Commenter la réponse de cs_louis14
0
Merci
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.
Commenter la réponse de neocol
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
7
0
Merci
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
Commenter la réponse de cs_louis14
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
7
0
Merci
Merci


louis
Commenter la réponse de cs_louis14
0
Merci
Merci pour votre aide, entrain de tester.je vais vous mettre le résultat, ça va me sauver au boulot.merci encore les gars.
Commenter la réponse de neocol
0
Merci
MERCI LES GARS , çà a marché nikel. MERCI ENCORE LES GARS. comment je vais faire pour indiquer que c'est résolu?
Commenter la réponse de neocol
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
0
Merci
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
Commenter la réponse de cptpingu
0
Merci
D'accord, merci pour votre aide et conseil.c'est marqué la bonne réponse.
Cordialement.
Youness MOURTAJI
Commenter la réponse de neocol