Resultat d'une fct est un paramétre d'entée de la mm fct

Résolu
neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

3 réponses

neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   1
 
J'ai pensé à changer la fct à int Copier(char* bloc, int pas1, int pas2, char* chaine), mais je reçois toujours une segmentation fault.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Oui c'est tout à fait possible.
Le segfault est probablement obtenu parce que tu n'as pas alloué ta chaîne (malloc par exemple).
Ce qui donnerait :
int main(void) {
   /*définition de bloc, pas1 et pas2*/
   resultat=malloc(strlen(bloc)+1);
   COPIER(bloc, pas1,pas2, resultat);
   printf("après : %s\n", resultat);
   return 0;
}
0
neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,
J'ai résolu mon pb, voici un exemple démonstratif :
#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;
}


Effectivement, le pb était l'allocation de la mémoire pour la chaine de retour.
Merci pour votre aide.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pour info, tu n'as pas besoin de refaire une allocation dans ta fonction strChange() du moment que la mémoire pointée par str est assez grande.
Un simple strcpy() suffira (et donc pas besoin non plus de passer par un double pointeur).
0