operaciones leer imprimir guardar funciones espacios copiar con como caracteres cadenas cadena arreglo c format printf

imprimir - leer cadena de caracteres en c



cadena printf, artículo de longitud variable (2)

No hay necesidad de construir una cadena de formato especial. printf permite especificar la precisión usando un parámetro (que precede al valor) si usa a .* como precisión en la etiqueta de formato.

Por ejemplo:

printf ("%d %.*s", number, SIZE, letters);

Nota: hay una distinción entre el ancho (que es un ancho de campo mínimo) y la precisión (que proporciona la cantidad máxima de caracteres para imprimir). %*s especifica el ancho, %.s especifica la precisión. (y también puedes usar %*.* pero luego necesitas dos parámetros, uno para el ancho uno para la precisión)

Consulte también la página man 3 printf ( man 3 printf en Linux) y especialmente las secciones sobre ancho de campo y precisión:

En lugar de una cadena de dígitos decimales, se puede escribir "*" o "* m $" (para un entero decimal m) para especificar que la precisión se da en el siguiente argumento, o en el argumento m-ésimo, respectivamente, que debe ser de tipo int.

#define SIZE 9 int number=5; char letters[SIZE]; /* this wont be null-terminated */ ... char fmt_string[20]; sprintf(fmt_string, "%%d %%%ds", SIZE); /* fmt_string = "%d %9d"... or it should be */ printf(fmt_string, number, letters);

¿Hay una mejor manera de hacer esto?


Una función algo desconocida es asprintf . El primer parámetro es un **char . Esta función malloc espacio para la cadena para que no tenga que hacer la contabilidad. Recuerde free la cadena cuando haya terminado.

char *fmt_string; asprintf(&fmt_string, "%%d %%%ds", SIZE); printf(fmt_string, number, letters); free(fmt_string);

es un ejemplo de uso.