typestar

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

  1. ftell tras buscar el final da la longitud.
  2. El byte extra es para el terminador que agregas tú.
  3. Quien llama es dueño del búfer que vuelve.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 4 en Abrir y leer; paso 4 de 12 en Archivos y E/S.

← Anterior Siguiente →