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
- Dos pasadas evitan reasignar repetidamente.
- El total incluye los separadores y un byte para el NUL.
- El resultado es propiedad de quien llama.
Palabras clave y builtins usados aquí
NULLcharconstforifreturnsize_t
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.
Paso 4 de 4 en Copiar y construir; paso 4 de 13 en Cadenas y texto.