Problema al leer desde un archivo a un registro
Hola, tengo un problema porque me han pasado un programa que en teor铆a hace unos a帽os compilaba.
El problema lo tengo cuando el programa intenta leer de un archivo rellenando todos los campos de un registro.
El programa define un registro y luego intenta leer, digamos:
struct {
char nombre[20];
char apellido[20];
char telefono[15];
} registro;
int fichero;
fichero = open("nombres.txt", O_RDONLY, 0);
num = read(fichero, registro, sizeof(registro));
Con este c贸digo no compila, y dice que no puede asignar "void *" al registro.
sin embargo si para abrir el fichero usamos
FILE *fichero;
fichero = fopen( "nombres.txt", "r" );
s铆 que funciona, sin embargo no tengo permiso para modificar el c贸digo. ¿Alguno sabeis a que se puede deber?? Muchas gracias por vuestra ayuda.
El problema lo tengo cuando el programa intenta leer de un archivo rellenando todos los campos de un registro.
El programa define un registro y luego intenta leer, digamos:
struct {
char nombre[20];
char apellido[20];
char telefono[15];
} registro;
int fichero;
fichero = open("nombres.txt", O_RDONLY, 0);
num = read(fichero, registro, sizeof(registro));
Con este c贸digo no compila, y dice que no puede asignar "void *" al registro.
sin embargo si para abrir el fichero usamos
FILE *fichero;
fichero = fopen( "nombres.txt", "r" );
s铆 que funciona, sin embargo no tengo permiso para modificar el c贸digo. ¿Alguno sabeis a que se puede deber?? Muchas gracias por vuestra ayuda.
El problema es que estas abriendo el archivo solo para lectura "r".
Para escritura se abre con "w".
Para lectura/escritura se usa "w+".
Te aconsejo que consigas una copia de MSDN, contiene una lista de todas las funciones C/C++ y sus parametros
Para escritura se abre con "w".
Para lectura/escritura se usa "w+".
Te aconsejo que consigas una copia de MSDN, contiene una lista de todas las funciones C/C++ y sus parametros
Saludos, la causa es bien sencilla, en el read el segundo parametro es un puntero a void, es decir, se pasa por referencia el parametro, mientras que tu le estas pasando un registro y punto. Para ello tienes que hacer lo siguiente:
int num = read(fichero, ®istro, sizeof(registro));
Fijate que le he puesto un & a registro, de esta manera esta solucionado tu problema.
int num = read(fichero, ®istro, sizeof(registro));
Fijate que le he puesto un & a registro, de esta manera esta solucionado tu problema.
