Resultat d'une fct est un paramétre d'entée de la mm fct
Résolu/Fermé
neocol
Messages postés
63
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
6 février 2016
-
4 juin 2013 à 12:20
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 4 juin 2013 à 21:43
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 4 juin 2013 à 21:43
A voir également:
- Resultat d'une fct est un paramétre d'entée de la mm fct
- Netflix paramètre compte - Guide
- Remettre parametre usine pc - Guide
- Lexer resultat - Télécharger - Sport
- Parametre windows - Guide
- Changer parametre dns - Guide
3 réponses
neocol
Messages postés
63
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
6 février 2016
1
4 juin 2013 à 12:21
4 juin 2013 à 12:21
J'ai pensé à changer la fct à int Copier(char* bloc, int pas1, int pas2, char* chaine), mais je reçois toujours une segmentation fault.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 juin 2013 à 21:19
4 juin 2013 à 21:19
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 :
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; }
neocol
Messages postés
63
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
6 février 2016
1
4 juin 2013 à 21:24
4 juin 2013 à 21:24
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.
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 juin 2013 à 21:43
4 juin 2013 à 21:43
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).
Un simple strcpy() suffira (et donc pas besoin non plus de passer par un double pointeur).