snprintf, el constructor seguro en C
snprintf acota la escritura y te dice cuánto habría medido el resultado completo.
#include <stdio.h>
int build_label(char *out, size_t cap, const char *lang, int tpm) {
int needed = snprintf(out, cap, "%s at %d tpm", lang, tpm);
if (needed < 0) {
return -1;
}
return ((size_t) needed >= cap) ? 0 : 1;
}
void show(void) {
char small[10];
char roomy[64];
printf("%d %s\n", build_label(small, sizeof small, "rust", 104), small);
printf("%d %s\n", build_label(roomy, sizeof roomy, "rust", 104), roomy);
}
Cómo funciona
- Siempre termina la cadena, mientras el tamaño no sea cero.
- El valor de retorno es la longitud que quería, así detecta el truncamiento.
- Eso lo hace la herramienta correcta para construir cualquier cadena.
Palabras clave y builtins usados aquí
charconstifintreturnsize_tsizeofvoid
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 421
- Tokens
- 134
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 85 segundos.
Paso 2 de 4 en Copiar y construir; paso 2 de 13 en Cadenas y texto.