Exercice en programmation C
Fermé
samehmousbah
-
15 oct. 2011 à 20:32
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 16 oct. 2011 à 11:19
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 16 oct. 2011 à 11:19
A voir également:
- Exercice en programmation C
- Application de programmation - Guide
- Traitement d'exercice - Forum Bureautique
- Mettre en veille un programme - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
1 réponse
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 16/10/2011 à 11:23
Modifié par Hxyp le 16/10/2011 à 11:23
Bonjour,
la variable int ret; n'est pas utilisée, l'allocation pour buf ne prend pas en compte la nouvelle taille qu'aura la chaîne de sortie en ajoutant les espaces supplémentaires. Vous pouvez en premier lieu compter le nombre d'espaces et l'ajouter pour l'allocation +1 pour le caractère null de fin de chaîne, il faut ajouter le caractère null à la fin. Il n'y pas de vérification du retour de malloc (NULL en cas d'échec) il faut l'ajouter. Le fait de retourner un int n'a pas vraiment de sens comme le free de buf, le strcpy admet que dest est un tableau de char qui a déjà la taille suffisante pour prendre la chaîne (allouée à l'extérieur donc) pourquoi ne pas simplement retourner l'adresse de buf et la récupérer dans dest ?
Aussi comme dit dans l'énoncé "even if the arguments provided to the function are incorrect." Retirez le paramètre "size" de la fonction il ne sert à rien puisqu'en calculant le nombre d'espace vous obtenez le nombre de char de la chaîne "msg" :
un truc comme ça, i = taille de msg et n = nombre d'espaces
la variable int ret; n'est pas utilisée, l'allocation pour buf ne prend pas en compte la nouvelle taille qu'aura la chaîne de sortie en ajoutant les espaces supplémentaires. Vous pouvez en premier lieu compter le nombre d'espaces et l'ajouter pour l'allocation +1 pour le caractère null de fin de chaîne, il faut ajouter le caractère null à la fin. Il n'y pas de vérification du retour de malloc (NULL en cas d'échec) il faut l'ajouter. Le fait de retourner un int n'a pas vraiment de sens comme le free de buf, le strcpy admet que dest est un tableau de char qui a déjà la taille suffisante pour prendre la chaîne (allouée à l'extérieur donc) pourquoi ne pas simplement retourner l'adresse de buf et la récupérer dans dest ?
Aussi comme dit dans l'énoncé "even if the arguments provided to the function are incorrect." Retirez le paramètre "size" de la fonction il ne sert à rien puisqu'en calculant le nombre d'espace vous obtenez le nombre de char de la chaîne "msg" :
int n,i; for(n=i=0;msg[i];i++)if(msg[i]==' ')n++;
un truc comme ça, i = taille de msg et n = nombre d'espaces