tia tag sobre que preguntas nadie imagenes hombre hace cosas amor c string printf

tag - ¿Cómo imprimo una cadena que no termina en nulo usando printf?



tag del amor preguntas (2)

¿Cómo puedo imprimir una cadena no terminada en nulo usando printf, asumiendo que conozco la longitud de la cadena en tiempo de ejecución?


La respuesta proporcionada por @KennyTM es genial, pero con una sutileza.

En general, si la cadena no es nula está "terminada", pero tiene un carácter nulo en el medio, printf("%.*s", length, string); No funciona como se esperaba. Esto se debe a que la cadena de formato %.*s le pide a printf que imprima un máximo de caracteres de length , no exactamente caracteres de length .

Prefiero usar la solución más general señalada por @William Pursell en un comentario en el marco del OP:

fwrite(string, sizeof(char), length, stdout);

Aquí hay un código de ejemplo:

#include <stdio.h> int main(void) { size_t length = 5; char string[length]; string[0] = ''A''; string[1] = ''B''; string[2] = 0; // null character in the middle string[3] = ''C''; string[4] = ''D''; printf("With printf: %.*s/n", length, string); printf("With fwrite: "); fwrite(string, sizeof(char), length, stdout); printf("/n"); return 0; }

Salida:

With printf: AB With fwrite: AB CD


printf("%.*s", length, string);

Utilice junto con otros argumentos:

printf("integer=%d, string=%.*s, number=%f", integer, length, string, number); // ^^^^ ^^^^^^^^^^^^^^

En C, puede especificar la longitud máxima para la salida con el formato %.123s . Esto significa que la longitud de salida es a lo sumo de 123 caracteres. El 123 podría reemplazarse por * , de modo que la longitud se tomará del argumento de printf en lugar de codificado.

Tenga en cuenta que esto supone que la string no contiene ningún bytes nulos interiores (/ 0), ya que %.123s solo limita la longitud máxima, no la longitud exacta , y las cadenas aún se tratan como terminadas en nulo.

Si desea imprimir una cadena no terminada en nulo con un valor nulo interior, no puede usar un solo printf. Utilice fwrite lugar:

fwrite(string, 1, length, stdout);

Vea la respuesta de @ MSDousti para una explicación detallada.