Suponga que tiene una cadena que NO está null
terminada y conoce su tamaño exacto, entonces, ¿cómo puede imprimir esa cadena printf
en C? Recuerdo tal método pero no puedo averiguarlo ahora ...
Suponga que tiene una cadena que NO está null
terminada y conoce su tamaño exacto, entonces, ¿cómo puede imprimir esa cadena printf
en C? Recuerdo tal método pero no puedo averiguarlo ahora ...
Respuestas:
Existe una posibilidad con printf, es así:
printf("%.*s", stringLength, pointerToString);
No es necesario copiar nada, no es necesario modificar la cadena o el búfer original.
printf
incluso después de una ~ década ... :)
printf
, imprimirá hasta 11 caracteres o hasta que encuentre NULL, lo que ocurra primero; en su ejemplo, NULL viene primero. Especificar una longitud máxima no hace que NULL pierda su significado de "fin de cadena" para printf
.
Aquí hay una explicación de cómo %.*s
funciona y dónde se especifica.
Las especificaciones de conversión en una cadena de plantilla printf tienen la forma general:
% [ param-no $] flags width [ . precision ] type conversion
o
% [ param-no $] flags width . * [ param-no $] type conversion
La segunda forma es para obtener la precisión de la lista de argumentos:
También puede especificar una precisión de '*'. Esto significa que el siguiente argumento en la lista de argumentos (antes del valor real que se imprimirá) se utiliza como precisión. El valor debe ser un int y se ignora si es negativo.
- Sintaxis de conversión de salida en el manual de glibc
Para el %s
formato de cadenas, la precisión tiene un significado especial:
Se puede especificar una precisión para indicar el número máximo de caracteres a escribir; de lo contrario, los caracteres de la cadena hasta pero sin incluir el carácter nulo de terminación se escriben en el flujo de salida.
- Otras conversiones de salida en el manual de glibc
Otras variantes útiles:
"%*.*s", maxlen, maxlen, val
justificará a la derecha, insertando espacios antes;"%-*.*s", maxlen, maxlen, val
justificará a la izquierda."%-*.*s", padding, str_view.size(), str_view.data()
¡Puede usar un fwrite () para stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
De esta manera, generará los primeros caracteres (número definido en la variable number_of_chars) a un archivo, en este caso a stdout (la salida estándar, su pantalla).
printf("%.*s", length, string)
no trabajará.
Esto significa imprimir HASTA bytes de longitud O un byte nulo, lo que ocurra primero. Si su matriz de caracteres no terminada en nulo contiene bytes nulos ANTES de la longitud, printf se detendrá en ellos y no continuará.
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
Edité el código, aquí hay otra forma:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}
C
contexto, todas las cadenas terminan en nulo. Las matrices de char sin un nulo en ellas no son cadenas ... son matrices de char :)