Interfaces acotadas en C
Recibir el búfer y su capacidad juntos, y reportar cuánto se necesitaba.
size_t format_label(char *out, size_t cap, const char *lang, int stars) {
static const char *filled = "***";
size_t needed = strlen(lang) + 1 + (size_t) stars;
if (out != NULL && cap > needed) {
size_t n = strlen(lang);
memcpy(out, lang, n);
out[n] = ' ';
memcpy(out + n + 1, filled, (size_t) stars);
out[needed] = '\0';
}
return needed;
}
Cómo funciona
- Pasar un búfer sin su tamaño es como ocurren los desbordamientos.
- Devolver la longitud requerida deja a quien llama reintentar más grande.
- Esta es la forma de snprintf, y es una buena forma.
Palabras clave y builtins usados aquí
NULLcharconstifintreturnsize_tstatic
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 340
- Tokens
- 112
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 67 segundos.
Paso 3 de 4 en Firmas; paso 3 de 11 en APIs, errores y pruebas.