2010-02-11 26 views
5

Comment est-ce que je ferais un tableau de pointeurs de fichiers dans C?
Je voudrais créer un tableau de pointeurs de fichiers aux arguments de main ... comme a1.txt, a2.txt, etc ... Donc, je voudrais exécuter ./prog arg1.txt arg2.txt arg3.txt pour que le programme utilise ces fichiers.
Ensuite, l'argument pour principal est char **argvcréer un tableau de pointeurs vers des fichiers

De argv, je voudrais créer le tableau de fichiers/pointeurs de fichiers. C'est ce que j'ai jusqu'ici.

FILE *inputFiles[argc - 1]; 
int i; 
for (i = 1; i < argc; i++) 
    inputFiles[i] = fopen(argv[i], "r"); 
+0

Je ne trouve rien de mal à cela. Quel est le problème? –

Répondre

7

Le code est correct, mais n'oubliez pas de compiler en C99.

Si vous n'utilisez pas C99, vous devez créer le tableau sur tas, comme:

FILE** inputFiles = malloc(sizeof(FILE*) * (argc-1)); 

// operations... 

free(inputFiles); 
+0

Merci. Donc, juste pour tester l'intérêt, comment est-ce que j'imprimerais les noms des fichiers pointés par les pointeurs de tableau? – Hristo

+0

@Hristo - il n'y a aucun moyen de récupérer le nom du fichier à partir du fichier *. Mais puisque vous avez le tableau argv, le nom de fichier de inputFiles [n] peut être trouvé à argv [n]. –

+0

oui, j'ai les noms des fichiers stockés dans un autre tableau, je me demandais juste si je peux le faire dans l'autre sens. Je suis nouveau à C, c'est ma 4ème semaine :) – Hristo

2
#include <stdio.h>` 

int main(int argc, char **argv) 
{ 
FILE *inputFiles[argc - 1]; 
int i; 
for (i = 1; i < argc; i++) 
{ 
    printf("%s\n",argv[i]); 
    inputFiles[i] = fopen(argv[i], "r"); 
    printf("%p\n",inputFiles[i]); 
} 
    return 0; 
} 

Il imprime des pointeurs différents pour chaque pointeur de fichier ainsi que les noms. Permettre au système d'exploitation de fermer correctement les fichiers :)

+0

Merci. Cela a du sens! – Hristo