Supposons que vous ayez une chaîne qui n'est PAS terminée par null
et que vous connaissiez sa taille exacte, alors comment pouvez-vous imprimer cette chaîne avec printf
en C? Je me souviens d'une telle méthode mais je ne peux pas le découvrir maintenant ...
Il y a une possibilité avec printf, ça se passe comme ceci:
printf("%.*s", stringLength, pointerToString);
Pas besoin de copier quoi que ce soit, pas besoin de modifier la chaîne ou le tampon d'origine.
Voici une explication de la façon dont %.*s
fonctionne, et où il est spécifié.
Les spécifications de conversion dans une chaîne de modèle printf ont la forme générale:
% [ param-no $] flags width [ . precision ] type conversion
ou
% [ param-no $] flags width . * [ param-no $] type conversion
La deuxième forme est pour obtenir la précision de la liste d'arguments:
Vous pouvez également spécifier une précision de "*". Cela signifie que l'argument suivant dans la liste d'arguments (avant la valeur réelle à imprimer) est utilisé comme précision. La valeur doit être un entier et est ignorée si elle est négative.
- Syntaxe de conversion de sortie dans le manuel de la glibc
Pour %s
formatage des chaînes, la précision a une signification particulière:
Une précision peut être spécifiée pour indiquer le nombre maximum de caractères à écrire; sinon, les caractères de la chaîne jusqu'au, mais sans inclure le caractère nul final, sont écrits dans le flux de sortie.
- Autres conversions de sortie dans le manuel de la glibc
Autres variantes utiles:
"%*.*s", maxlen, maxlen, val
justifiera à droite, en insérant des espaces avant;"%-*.*s", maxlen, maxlen, val
justifiera à gauche.Vous pouvez utiliser un fwrite () pour stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
De cette façon, vous sortirez les premiers caractères (nombre défini dans la variable number_of_chars) dans un fichier, dans ce cas vers stdout (la sortie standard, votre écran)!
printf("%.*s", length, string)
ne fonctionnera PAS.
Cela signifie d'imprimer JUSQU'À longueur octets OR un octet nul, selon la première éventualité. Si votre tableau de caractères non terminé par null contient des octets nuls AVANT la longueur, printf s'arrêtera sur ceux et ne pas continuer.
printf("%.5s", pointerToNonNullTerminatedString);
La longueur de la chaîne sera de 5.
#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;
}
J'ai édité le code, voici une autre façon:
#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;
}