2010-05-03 11 views
5

Estoy usando Visual Studio 2005 (C \ C++).C - Abrir un archivo dentro de una función usando fopen

Estoy pasando una cadena en una función como una matriz de caracteres. Quiero abrir el archivo pasado como un parámetro y usarlo. Sé que mi código funciona en cierta medida, porque si codigo el nombre del archivo como primer parámetro, funciona perfectamente.

Me doy cuenta si miro el valor como un reloj, el valor incluye la dirección a un lado del literal de la cadena. He intentado pasar el nombre del archivo como un puntero, pero luego se queja sobre la conversión de tipo con __w64. Como dije antes, funciona bien con "filename.txt" en lugar de fileName. Estoy perplejo.

void read(char fileName[50],int destArray[MAX_R][MAX_C],int demSize[2]) 
{ 
    int rows=0; 
    int cols=0; 
    int row=0; 
    int col=0; 
    FILE * f = fopen(fileName,"r"); 
... 

El código de función de llamada es:

char in_filename[50]; 
int dem[MAX_R][MAX_C]; 
int dem_size[2]; 
get_user_input(in_filename); 
read(in_filename, dem, dem_size); 

En el reloj añadí para el nombre de archivo aparece el texto correcto, por lo que los datos están siendo aprobadas en

+0

Hm ... Hago eso mucho con MinGW. La función que luego abre un archivo pasa el parámetro "const char * filename" - MinGW nunca se quejó de eso. – mingos

Respuesta

5

Si está utilizando fopen(). entonces estás codificando en C, no en C++. Además, esta no es la forma de pasar matrices a las funciones. La sintaxis de la lista de parámetros es

void f(char arr[], unsigned int arr_size); 

En el caso de matrices multidimensionales se debe especificar el tamaño de más a la derecha dimensión explícitamente:

void f(char arr[][20], unsigned int arr_size); 

Dicho esto, trate de cambiar el parámetro de char fileName[50] a char* fileName.

+0

Mi error: al cambiar el parámetro a char *, el nombre del archivo se compila satisfactoriamente; sin embargo, el puntero del archivo no es válido y causa errores cuando fscan intenta usarlo. –

+0

muéstranos el código que llama a la función. – wilhelmtell

+0

¿Estás seguro de que existe el archivo con ese nombre de archivo? ¿Estás seguro de que tu directorio de trabajo es el directorio donde reside el archivo? – wilhelmtell

Cuestiones relacionadas