2010-02-11 16 views
5

¿Cómo podría hacer una matriz de apuntadores de archivo en C?
Me gustaría crear una matriz de punteros de archivo a los argumentos de main ... como a1.txt, a2.txt, etc ... Así que ejecutaría ./prog arg1.txt arg2.txt arg3.txt para que el programa use estos archivos.
Luego, el argumento para main es char **argvcrear una matriz de punteros a los archivos

Desde argv, me gustaría crear la matriz de archivos/punteros de archivo. Esto es lo que tengo hasta ahora.

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

No encuentro nada incorrecto en él. ¿Cuál es el problema? –

Respuesta

7

El código está bien, pero recuerde compilar en C99.

Si no se utiliza C99, es necesario crear la matriz en el montón, como:

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

// operations... 

free(inputFiles); 
+0

Gracias. Entonces, solo para probar Sake, ¿cómo imprimiría los nombres de los archivos a los que apuntan los punteros de matriz? – Hristo

+0

@Hristo: no hay forma de recuperar el nombre del archivo desde el ARCHIVO *. Pero como tiene la matriz argv, el nombre de archivo de inputFiles [n] se puede encontrar en argv [n]. –

+0

sí, tengo los nombres de los archivos almacenados en otra matriz, me preguntaba si puedo hacerlo de otra manera. Soy nuevo en C, esta es mi cuarta semana :) – 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; 
} 

Imprime diferentes punteros para cada apuntador de archivo, junto con los nombres. Permitir que el sistema operativo cierre correctamente los archivos :)

+0

Gracias. ¡Eso tiene mucho sentido! – Hristo

Cuestiones relacionadas