typestar

Construir una cadena en el heap en C

Unir un número desconocido de piezas: medir, reservar una vez y copiar.

#include <stdlib.h>
#include <string.h>

char *join(const char **parts, size_t n, const char *sep) {
    size_t total = 1;
    for (size_t i = 0; i < n; i++) {
        total += strlen(parts[i]);
        if (i + 1 < n) {
            total += strlen(sep);
        }
    }

    char *out = malloc(total);
    if (out == NULL) {
        return NULL;
    }

    size_t used = 0;
    for (size_t i = 0; i < n; i++) {
        size_t len = strlen(parts[i]);
        memcpy(out + used, parts[i], len);
        used += len;
        if (i + 1 < n) {
            size_t s = strlen(sep);
            memcpy(out + used, sep, s);
            used += s;
        }
    }
    out[used] = '\0';
    return out;
}

Cómo funciona

  1. Dos pasadas evitan reasignar repetidamente.
  2. El total incluye los separadores y un byte para el NUL.
  3. El resultado es propiedad de quien llama.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
31
Caracteres a escribir
529
Tokens
196
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 124 segundos.

Escribe este fragmento

Paso 4 de 4 en Copiar y construir; paso 4 de 13 en Cadenas y texto.

← Anterior Siguiente →