Salut
Voila j'ai un bête tableau de chaîne de caractère 'char **tab'
dont chaque ligne contient une chaîne de caractères.
J'utilise une boucle while pour en afficher le contenue :
while(tab[n] != NULL)
{
printf("%s\n", tab[n]);
n++;
}
Mais non, la boucle continue et comme il n'y a rien après la dernière chaîne le programme plante lamentablement.
Comment je fais pour tester que je suis bien a la dernière valeur du tableau ?
# Re
Posté par Damien Metzler . Évalué à 4.
Il faut que tu connaisses la taille de ton tableau pour itérer dedans, ou que tu implémente une liste chainée dont le dernier chainon pointera vers nul...
# ?
Posté par Sylvain Sauvage . Évalué à 4.
Tu le remplis comment ton tableau ?
# beh euh...
Posté par cho7 (site web personnel) . Évalué à 2.
int main(int argc, char **argv){
char tab[5][255];
int i;
for (i = 0; i< 5; i++)
tab[i][0] = NULL;
strcpy(tab [0],"plop");
strcpy(tab [1],"poulpe");
int n = 0;
while (tab[n][0] != NULL){
printf("%s\n",tab[n]);
n++;
}
return 0;
}
Pas testé, mais bon, ca devrait tourner (à caster si tu veux pas de warning...)
# Réponses
Posté par nanard . Évalué à 1.
Pour répondre aux deux premières question, je pensais a tord que le dernier elemment du tableau n'ayant pas était initialiser par un malloc et ne contenant rien, serais automatiquement mis a NULL, ce qui n'était pas le cas, voila maintenant j'alloue de la mémoire pour cette elemment et je le mets à NULL , et la boucle fonctionne correctement .
Pour la troisieme question voila comment je fais:
(Je poste le code pour avoir des remarques, savoir si c'est une bonne manière de faire, si je peut améliorer, bref si j'ai des critiques constructive c'est cool. Même pas peur :)
char ** get_fortune(void)
{
char **text;
FILE *file;
char line[128];
int n = 0;
text = malloc(sizeof(char*));
file = popen("/usr/games/fortune", "r");
while(fgets(line, 127, file) != NULL)
{
char *ptr;
if(n != 0) {
text = realloc(text, (sizeof(char*)*(n+1))); }
ptr = strchr(line, '\n');
*ptr = '\0';
text[n] = malloc(sizeof(char*)*strlen(line)+1);
strcpy(text[n], line);
n++;
}
text = realloc(text, (sizeof(char)*(n+1)));
text[n] = NULL;
pclose(file);
return text;
}
Rapide les réponses, merci encore, j'y galère depuis hier.
Allez tous vous faire spéculer.
[^] # Re: Réponses
Posté par nanard . Évalué à 1.
à chaque tour que j'en ai assez ?
Allez tous vous faire spéculer.
[^] # Re: Réponses
Posté par pierthi . Évalué à 2.
[^] # Re: Réponses
Posté par nanard . Évalué à 2.
C'est interessant de voir une autre personne faire la même chose que soi, ca donne une autre perspective.
Je n'ai pas testé ta façon, mais elle mets bien utile pour comprendre d'autres petites choses :), notemment l'allocation d'un seul coup du tableau de pointeur,
Entre temps ma fonction bugguan 1 fois sur trois j'ai changé de méthode pour passer par des structures chainé, et la ca marche correctement ( cad à chaque fois :)
Reste plus qu'a voire quel technique est la plus adapté.
Allez tous vous faire spéculer.
[^] # Re: Réponses
Posté par pierthi . Évalué à 2.
J'avais pas vu que tu faisais un popen() sur un programme (j'étais persuadé que c'était un fichier). Du coup le fseek va échouer lamentablement et la fonction va te renvoyer systématiquement NULL.
Bon, c'est pas demain que je deviendrais C lead architect moi :-(
[^] # Re: Réponses
Posté par alf . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.