Leer un archivo entero en C
Ir al final para el tamaño, reservar eso más uno y leerlo todo en una llamada.
#include <stdio.h>
#include <stdlib.h>
char *slurp(const char *path, long *length) {
FILE *f = fopen(path, "rb");
if (f == NULL) {
return NULL;
}
fseek(f, 0, SEEK_END);
long size = ftell(f);
rewind(f);
char *buffer = (size < 0) ? NULL : malloc((size_t) size + 1);
if (buffer == NULL) {
fclose(f);
return NULL;
}
size_t read = fread(buffer, 1, (size_t) size, f);
buffer[read] = '\0';
fclose(f);
*length = (long) read;
return buffer;
}
Cómo funciona
ftelltras buscar el final da la longitud.- El byte extra es para el terminador que agregas tú.
- Quien llama es dueño del búfer que vuelve.
Palabras clave y builtins usados aquí
FILENULLcharconstiflongreturnsize_t
El intento, en números
- Líneas
- 23
- Caracteres a escribir
- 435
- Tokens
- 149
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 94 segundos.
Paso 4 de 4 en Abrir y leer; paso 4 de 12 en Archivos y E/S.