tengo una estructura para representar cadenas en memoria en busca de esta manera:Usando size_t para especificar la precisión de una cadena en printf de C
typedef struct {
size_t l;
char *s;
} str_t;
Creo con size_t tiene sentido para especificar la longitud de una cadena de carbón . También me gustaría imprimir esta cadena usando printf("%.*s\n", str.l, str.s)
. Sin embargo, la precisión *
espera un argumento int
, no size_t
. No he podido encontrar nada relevante sobre esto. ¿Hay alguna manera de utilizar esta estructura correctamente, sin un molde a int
en la llamada printf()
?
¿no tiene previsto anular la terminación del 'char *'? Si es nulo terminado, no veo qué ajuste la precisión a la longitud lo conseguiría en primer lugar. Más allá de eso, creo que tus elecciones son: lanzar o cambiar tu 'size_t' por' int' y nunca permitir que sea negativo. –
@EvanTeran Las cadenas realmente apuntan a las piezas dentro de un buffer más grande, por lo que el carácter 'null' está en algún otro lugar. El tamaño de un 'int' no es un problema, ya que las cadenas son generalmente de unos pocos cientos de bytes. Lo que me frustra es que a pesar de que 'size_t' encajaría muy bien en este propósito, C99 no define un modificador de precisión especial que acepte un argumento' size_t'. –