typestar

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

  1. Siempre termina la cadena, mientras el tamaño no sea cero.
  2. El valor de retorno es la longitud que quería, así detecta el truncamiento.
  3. Eso lo hace la herramienta correcta para construir cualquier cadena.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

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

← Anterior Siguiente →