Miembros de arreglo flexible en C
Un arreglo de largo desconocido como último miembro: una sola reserva para encabezado y datos.
#include <stdlib.h>
#include <string.h>
typedef struct {
size_t len;
char data[];
} Buffer;
Buffer *buffer_new(const char *text) {
size_t n = strlen(text);
Buffer *b = malloc(sizeof *b + n + 1);
if (b == NULL) {
return NULL;
}
b->len = n;
memcpy(b->data, text, n + 1);
return b;
}
void buffer_free(Buffer *b) {
free(b);
}
Cómo funciona
- Los corchetes vacíos deben ir al final del struct.
- El
sizeofdel struct excluye la parte flexible. - Reserva el encabezado más n elementos en una sola llamada.
Palabras clave y builtins usados aquí
NULLcharconstifreturnsize_tsizeofstructtypedefvoid
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 324
- Tokens
- 104
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 62 segundos.
Paso 5 de 5 en Uniones y disposición; paso 5 de 13 en Uniones, campos de bits y comportamiento indefinido.