Quiero leer el contenido de un archivo de texto en una matriz char en C. Deben mantenerse las líneas nuevas.Lectura del archivo de texto completo en una matriz char en C
¿Cómo puedo lograr esto? Encontré algunas soluciones de C++ en la web, pero ninguna solución de C solo.
Editar: Tengo el siguiente código ahora:
void *loadfile(char *file, int *size)
{
FILE *fp;
long lSize;
char *buffer;
fp = fopen (file , "rb");
if(!fp) perror(file),exit(1);
fseek(fp , 0L , SEEK_END);
lSize = ftell(fp);
rewind(fp);
/* allocate memory for entire content */
buffer = calloc(1, lSize+1);
if(!buffer) fclose(fp),fputs("memory alloc fails",stderr),exit(1);
/* copy the file into the buffer */
if(1!=fread(buffer , lSize, 1 , fp))
fclose(fp),free(buffer),fputs("entire read fails",stderr),exit(1);
/* do your work here, buffer is a string contains the whole text */
size = (int *)lSize;
fclose(fp);
return buffer;
}
me sale una advertencia: Advertencia: la asignación crea un puntero desde un entero sin una conversión. Esto está en la línea size = (int)lSize;
. Si ejecuto la aplicación, segfaults.
Actualización: El código anterior funciona ahora. Localicé el segfault, y publiqué otra pregunta. Gracias por la ayuda.
duplicado posible de [La manera más fácil de obtener los contenidos del archivo en C] (http://stackoverflow.com/questions/174531/easiest-way-to-get-files-contents-in-c) –
Uso fseek() para obtener el tamaño del archivo, lo limita a leer solo archivos de disco reales. Su uso significa que no puede leer desde un conducto (como la entrada estándar), canalizaciones con nombre, dispositivos o flujos de red. Vea el enlace en el comentario anterior [La forma más fácil de obtener los contenidos del archivo en C] (http://stackoverflow.com/questions/174531) – anthony