Pointeurs, Tableaux et Chaines... en C.
Résolu
mattrse
Messages postés
75
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- Pointeurs, Tableaux et Chaines... en C.
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Mise en forme tableau word - Guide
- Recherche automatique des chaînes tv thomson ✓ - Forum Téléviseurs
2 réponses
Salut mattrse,
Tu te compliques la vie.
Si tout ce que dois faire ta fonction c'est afficher le chemin reconstitué, cela ne sert à rien de stocker la chaîne dans str, il suffit d'afficher successivement les différents éléments du tableau de pointeurs sur des chaînes.
Simplement, comme cela :
Cela donne :
Si pour une raison ou une autre, tu dois utiliser str, déclare str au début de ta fonction (et non pas dans des accolades internes, qui ne donnent à la variable qu'une portée locale). C'est la même chose en Java, sauf erreur.
S'agissant de ta chaîne str, fais y référence dans les fonctions de manipulation de chaîne comme étant "str" et non "*str", car celles-ci attendent des pointeurs et non pas un pointeur déréférencé.
Stocker cela dans une chaîne str dans ta fonction me paraît inutile, car tu n'en fais rien, à part afficher le résultat.
S'agissant des return de ta fonction, s'ils signifient vrai ou faux, comme je le pense, en C faux est 0, et vrai toute autre valeur (1, par exemple).
J'ai aussi changé les noms des arguments à ta fonction, car ils rappellent étrangement ceux de main, et ce me met mal à l'aise. mais c'est de l'ordre de l'irrationnel, j'imagine :-)
Dal
Edit : coquille EXIT_SUCCESS / EXIT_FAILURE
Tu te compliques la vie.
Si tout ce que dois faire ta fonction c'est afficher le chemin reconstitué, cela ne sert à rien de stocker la chaîne dans str, il suffit d'afficher successivement les différents éléments du tableau de pointeurs sur des chaînes.
Simplement, comme cela :
#include <stdio.h>
#include <stdlib.h>
int chemin(int nbArg, char **tabArgv)
{
int n;
if (nbArg == 0)
{
printf("Erreur, vous devez fournir au moins 1 parametre.");
return 0;
}
printf("./");
for (n = 0; n < nbArg; n++)
{
printf(tabArgv[n]);
if (n != nbArg - 1)
printf("/");
}
return 1;
}
int main(void)
{
char* tabArgv[500] =
{ "home", "toto", "devoirs", "maths", "zero.txt" };
int nbArg = 5;
if (chemin(nbArg, tabArgv))
return EXIT_SUCCESS;
else
return EXIT_FAILURE;
}
Cela donne :
./home/toto/devoirs/maths/zero.txt
Si pour une raison ou une autre, tu dois utiliser str, déclare str au début de ta fonction (et non pas dans des accolades internes, qui ne donnent à la variable qu'une portée locale). C'est la même chose en Java, sauf erreur.
S'agissant de ta chaîne str, fais y référence dans les fonctions de manipulation de chaîne comme étant "str" et non "*str", car celles-ci attendent des pointeurs et non pas un pointeur déréférencé.
Stocker cela dans une chaîne str dans ta fonction me paraît inutile, car tu n'en fais rien, à part afficher le résultat.
S'agissant des return de ta fonction, s'ils signifient vrai ou faux, comme je le pense, en C faux est 0, et vrai toute autre valeur (1, par exemple).
J'ai aussi changé les noms des arguments à ta fonction, car ils rappellent étrangement ceux de main, et ce me met mal à l'aise. mais c'est de l'ordre de l'irrationnel, j'imagine :-)
Dal
Edit : coquille EXIT_SUCCESS / EXIT_FAILURE
Tout d'abord merci pour ta réponse Dal !
J'ai oublié d'indiquer quelque chose (rah moi qui pensait avoir tout dit !). Je suis dans l'obligation d'utiliser la fonction de concaténation strcat.
Pour tout expliquer, c'est un exercice que j'ai à faire en TD (je suis en DUT Info) et je crois comprendre que les profs veulent nous faire utiliser le c pour faire du système. Bien sûr j'ai sollicité mon prof' TD mais il ne m'a pas beaucoup aidé (il y a des profs comme ça..).
En tout cas, j'ai repris ton code, Dal, et j'ai integré l'utilisation de strcat. Voici ce que ca donne :
Encore merci ! :)
J'ai oublié d'indiquer quelque chose (rah moi qui pensait avoir tout dit !). Je suis dans l'obligation d'utiliser la fonction de concaténation strcat.
Pour tout expliquer, c'est un exercice que j'ai à faire en TD (je suis en DUT Info) et je crois comprendre que les profs veulent nous faire utiliser le c pour faire du système. Bien sûr j'ai sollicité mon prof' TD mais il ne m'a pas beaucoup aidé (il y a des profs comme ça..).
En tout cas, j'ai repris ton code, Dal, et j'ai integré l'utilisation de strcat. Voici ce que ca donne :
int chemin(int nbArg, char **tabArgv) // 4)
{
int n;
char* str[500];
strcpy(str,"./");
if (nbArg == 0)
{
printf("Erreur, vous devez fournir au moins 1 parametre.");
return 0;
}
for (n = 0; n < nbArg; n++)
{
strcat(str,tabArgv[n]);
strcat(str,"/");
}
printf("%s",str);
return 1;
}
Encore merci ! :)
Et il est où le main() ? S'il s'agit de chemin, tu dois intervertir return 0 et return 1.
Attention à ton type char *str[500]. Il s'agit d'un tableau de pointeurs sur char et tu le traites comme un tableau. Mets plutôt : char str[500];
Pour les printf(), n'oublie pas '\n' en fin de chaîne ou alors il faudra mettre un flush.
Et enfin, pour bien faire, il faudrait vérifier que str peut stocker un élément avant de faire un strcat, sinon cela peut engendrer un segfault.
Attention à ton type char *str[500]. Il s'agit d'un tableau de pointeurs sur char et tu le traites comme un tableau. Mets plutôt : char str[500];
Pour les printf(), n'oublie pas '\n' en fin de chaîne ou alors il faudra mettre un flush.
Et enfin, pour bien faire, il faudrait vérifier que str peut stocker un élément avant de faire un strcat, sinon cela peut engendrer un segfault.