web-dev-qa-db-fra.com

Que signifient% s et% d dans printf en langage C?

Je ne comprends pas ce que le %s et d% faire dans ce code C:

for (i=0;i<sizeof(code)/sizeof(char*); i++) {
    printf("%s%d%s%d\n", "Length of String ", i, " is ", strlen(code[i]));
    str = code[i];
    printf("%s%d%s%c\n","The first character in string ", i, " is ", str[0]);
}

Je suis nouveau dans le langage C et ma formation est en Java.

  • Qu'est-ce que la %s%d%s%d symboles indiquent?
  • Pourquoi sont-ils si nombreux?
  • La virgule est-elle utilisée ici pour la concaténation au lieu d'un +?
28
Simon Kiely

La famille de fonctions printf () utilise % caractère en tant qu'espace réservé. Lorsqu'un % est rencontré, printf lit les caractères suivant le % pour déterminer quoi faire:

%s - Take the next argument and print it as a string
%d - Take the next argument and print it as an int

Voir cet article Wikipedia pour une belle image: chaîne au format printf

Le \n à la fin de la chaîne correspond à un caractère de retour à la ligne/retour à la ligne.

56
iccir

La notation% s'appelle un spécificateur de format. Par exemple,% d indique à printf () d’imprimer un entier. % s pour imprimer une chaîne (char *), etc. Vous devriez vraiment chercher ici: http://google.com/search?q=printf+format+specifiers

Non, les virgules ne sont pas utilisées pour la concaténation de chaînes. Les virgules servent à séparer les arguments passés à une fonction.

3
user529758

Le premier argument désigne les espaces réservés pour les variables/paramètres suivants.
Par exemple, %s indique que vous vous attendez à ce que String soit votre premier paramètre d’impression.

Java a aussi un printf, qui est très similaire.

3
rtheunissen

% d est imprimé comme un int% s est imprimé comme une chaîne% f est imprimé comme une virgule flottante

Il convient de noter qu'il est incorrect de dire que ceci est différent de Java. Printf représente le format d'impression. Si vous imprimez au format Java, c'est exactement la même utilisation. Cela peut vous permettre de résoudre des problèmes intéressants et nouveaux en C et en Java!

2
Irony

"%s%d%s%d\n" est la chaîne de format; il indique à la fonction printf comment formater et afficher le résultat. N'importe quoi dans la chaîne de format qui n'a pas de % immédiatement devant est affiché tel quel.

%s et %d sont des spécificateurs de conversion; ils disent à printf comment interpréter les arguments restants. %s indique à printf que l'argument correspondant doit être traité comme une chaîne (en langage C, une séquence terminée par 0 de char); le type de l'argument correspondant doit être char *. %d indique à printf que l'argument correspondant doit être traité comme une valeur entière; le type de l'argument correspondant doit être int. Comme vous venez d'un fond Java, il est important de noter que printf (comme d'autres fonctions variadiques) s'appuie sur vous pour le dire quels sont les types d'arguments restants Si la chaîne de format était "%d%s%d%s\n", printf tenterait de traiter "Length of string" en tant que valeur entière et i en tant que chaîne, avec des résultats tragiques.

2
John Bode

% s est pour la chaîne% d est pour décimal (ou int)% c est pour le caractère

Il semble être en train de parcourir un tableau de caractères et d’imprimer la chaîne existante à partir de chaque position suivante. Les chaînes s'arrêteront à la première valeur null dans chaque cas.

Les virgules ne font que séparer les arguments d'une fonction qui prend un nombre variable d'arguments; ce nombre correspond au nombre de% args dans le descripteur de format situé au début.

2
Rayfleck

Le premier argument de printf est une chaîne d'identifiants.

% s fait référence à une chaîne% d fait référence à un entier% c fait référence à un caractère. C’est pourquoi:% s% d% s% c\n imprime la chaîne "Le premier caractère de la ligne",% d imprime i,% s imprime "est" et% c imprime str [0].

1
Aza

% s% d% s% d\n est une chaîne de formatage. Il est utilisé pour spécifier comment les informations sont formatées sur une sortie. Ici, la chaîne de format est censée imprimer une chaîne suivie d'un chiffre suivi d'une chaîne, puis à nouveau d'un chiffre. Le dernier symbole\n représente le retour chariot qui marque la fin d’une ligne. En C, les chaînes ne peuvent pas être concaténées avec + ou, bien que vous puissiez combiner différentes sorties sur une seule ligne en utilisant les chaînes de format appropriées (l'utilisation des chaînes de format permet de formater les informations de sortie.).

0
sidharth sharma

% (lettre) indique le type de format du texte de remplacement. % s spécifie une chaîne,% d un entier et% c un caractère.

0
3Pi