La lecture des lignes de c fichier et mettre les chaînes dans un tableau
Je suis en train d'ajouter à chaque ligne d'un fichier c dans un tableau. Le contenu de files.txt est
first.c
second.c
third.c
fourth.c
Je veux mon code pour imprimer chacune de ces lignes, ajoutez la ligne de mon tableau, et ensuite, imprimez chaque entrée dans mon tableau. Pour l'instant il est en train de faire la première partie correctement, mais c'est seulement l'ajout de la quatrième.c de la matrice. Quelqu'un peut me dire quel est le problème avec mon code?
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i=0;
int numProgs=0;
char* programs[50];
char line[50];
FILE *file;
file = fopen("files.txt", "r");
while(fgets(line, sizeof line, file)!=NULL) {
//check to be sure reading correctly
printf("%s", line);
//add each filename into array of programs
programs[i]=line;
i++;
//count number of programs in file
numProgs++;
}
//check to be sure going into array correctly
for (int j=0 ; j<numProgs+1; j++) {
printf("\n%s", programs[j]);
}
fclose(file);
return 0;
}
- u ne signifie
sizeof(line)
? sizeof line
est correct aussi.- Cette ligne: programmes[i]=ligne; ne fonctionnera pas pour deux raisons. 1) le tableau de 50 pointeurs de char doit avoir le besoin de l'allocation de la mémoire (et de l'aiguille, pour que la mémoire) pour chacun de ces 50 pointeurs. Vous suggérons d'utiliser calloc() de sorte que les segments de mémoire sera pré définie pour tout '\0'. 2) cette ligne est en train de faire est de fixer les programmes[i] pointeur sur la ligne array[]. Ce qui est vraiment nécessaire, c'est quelque chose comme: strcpy( programmes[i], ligne );
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de changer
à
Sinon tous les pointeurs dans le
programs
matrice de point au même endroit (c'est-àline
).BTW: si files.txt contient plus de 50 lignes, vous serez confronté à des problèmes.
vous avez besoin d'allouer de la nouvelle de stockage pour chaque ligne, sinon vous avez seulement 1 ligne de mémoire tampon pour stocker les noms de fichier de sorte que le dernier d'une montre jusqu'à, faire dans la boucle while:
lors de la déclaration de
char *programs[50]
ne sont pas les pointeurs valides. Donc, vous devez allouer de la mémoire pour chaque pointeur de fonction sur chaque ligne de la taille. Donc, essayez celui-ci.. (je suis Ici à l'aide de malloc & strcpy)Pas besoin de
i
et sauver tous les pointeurs vers des lignes dans le tableau, vous devez utiliserstrdup()
. Il suffit de faire comme cela:programs[numProgs++] = strdup(line);
Dans la deuxième condition de boucle doit être
j < numProgs
.Ajouter une condition supplémentaire à votre boucle while pour empêcher l'écriture de passer la fin de tableau:
while(fgets(line, sizeof line, file)!=NULL && numProgs < 50)