99 votes

À l'aide de printf avec un non-null string

Supposons que vous avez une chaîne qui n'est PAS null et que vous connaissez sa taille exacte, alors comment pouvez-vous l'impression que la chaîne de printf en C? Je me souviens d'une telle méthode, mais je ne peux pas savoir savoir...

162voto

DarkDust Points 47584

Il y a une possibilité avec printf, il va comme ceci:

printf("%.*s", stringLength, pointerToString);

Pas besoin de copier quoi que ce soit, pas besoin de modifier la chaîne d'origine ou de la mémoire tampon.

24voto

Tobu Points 10101

Voici une explication de la façon dont %.*s œuvres, et où il est spécifié.

Les spécifications de conversion dans un printf modèle de chaîne 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 des 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 à être imprimé) est utilisé comme la précision. La valeur doit être un int, et est ignoré s'il est négatif.

- Sortie de la conversion de la syntaxe dans la glibc manuel

Pour %s chaîne de formatage, de la précision a une signification particulière:

Une précision peut être spécifié pour indiquer le nombre maximal de caractères à écrire; sinon caractères dans la chaîne, mais pas y compris le caractère de fin null sont écrits dans le flux de sortie.

- D'autres conversions des sorties dans la glibc manuel

Autres variantes:

  • "%*.*s", maxlen, maxlen, val aura droit justifier, en insérant des espaces avant;
  • "%-*.*s", maxlen, maxlen, val sera la justification à gauche.

20voto

Pedro Sousa Points 21

Vous pouvez utiliser un fwrite() sur la sortie standard stdout!

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

De cette façon, vous aurez la sortie de la première caractères (nombre défini dans number_of_chars variable ) dans un fichier, dans ce cas vers stdout (sortie standard, votre écran)!

8voto

Todd Freed Points 128

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

Cela signifie d'imprimer JUSQU'à octets de longueur OU un octet nul, selon la première éventualité. Si votre non-null tableau de char contient des octets nuls AVANT de la longueur, printf va s'arrêter sur ceux-ci, et ne pas continuer.

1voto

Fahad Uddin Points 3139
#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,heres 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;

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X