Utiliser printf avec une chaîne terminée par un caractère non nul

Supposons que vous ayez une chaîne qui n’est PAS terminée par null et que vous connaissez 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 savoir maintenant …

Il y a une possibilité avec printf, ça se passe comme ceci:

 printf("%.*s", ssortingngLength, pointerToSsortingng); 

Pas besoin de copier quoi que ce soit, pas besoin de modifier la chaîne ou le tampon d’origine.

Voici une explication du fonctionnement de %.*s et de son emplacement.

Les spécifications de conversion dans une chaîne de modèle printf ont la forme générale suivante:

 % [ param-no $] flags width [ . precision ] type conversion 

ou

 % [ param-no $] flags width . * [ param-no $] type conversion 

La seconde forme permet d’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 des arguments (avant la valeur réelle à imprimer) est utilisé comme précision. La valeur doit être un int et est ignorée si elle est négative.

– Syntaxe de conversion de sortie dans le manuel glibc

Pour le formatage des chaînes %s , 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; Dans le cas contraire, les caractères de la chaîne, mais sans inclure le caractère nul final, sont écrits dans le stream de sortie.

– Autres conversions de sortie dans le manuel glibc

Autres variantes utiles:

  • "%*.*s", maxlen, maxlen, val justifient à droite, en insérant des espaces avant;
  • "%-*.*s", maxlen, maxlen, val seront justifiés à gauche.

Vous pouvez utiliser un fwrite () pour stdout!

 fwrite(your_ssortingng, sizeof(char), number_of_chars, stdout); 

De cette façon, vous allez afficher les premiers caractères (numéro défini dans la variable number_of_chars) dans un fichier, dans ce cas, stdout (la sortie standard, votre écran)!

printf("%.*s", length, ssortingng) ne fonctionnera PAS.

Cela signifie que vous devez imprimer des octets de longueur OU OU un octet nul, selon la première éventualité. Si votre tableau de caractères à terminaison non nulle contient des octets nuls AVANT la longueur, printf s’arrêtera sur ceux-ci et ne continuera pas.

 #include int main() { /*suppose a ssortingng str which is not null terminated and n is its length*/ int i; for(i=0;i 

J'ai édité le code, voici une autre manière:

 #include int main() { printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the ssortingng.*/ return 0; } 
 printf("%.5s", pointerToNonNullTerminatedSsortingng); 

La longueur de la chaîne sera 5.