62 votes

Chaînes et caractères avec printf

J'ai été confondu avec l'utilisation de %c et %s dans le programme C suivant

 #include <stdio.h>
    
void main()
{
    char name[]="siva";
    printf("%s\n",name);
    printf("%c\n",*name);
}

La sortie est

 siva
s

Pourquoi nous devons utiliser un pointeur pour afficher un caractère %c, et le pointeur n'est pas nécessaire pour une chaîne

Je reçois une erreur lorsque j'utilise

 printf("%c\n", name);

L'erreur que j'ai est

 str.c: In function ‘main':
str.c:9:2: warning: format ‘%c' expects type ‘int', but argument 2 has type ‘char *'

20voto

aleroot Points 30853
%c

est conçu pour un seul caractère un caractère, il n'imprime donc qu'un seul élément. En passant le tableau de caractères en tant que pointeur, vous passez l'adresse du premier élément du tableau (c'est-à-dire un seul caractère), puis sera imprimé :

s

 printf("%c\n",*name++);

imprimera

je

etc ...

Le pointeur n'est pas nécessaire pour le %s car il peut fonctionner directement avec une chaîne de caractères.

6voto

zeuxcg Points 4578

Vous confondez l'opérateur de déréférencement * avec l'annotation de type pointeur *. Fondamentalement, en C * signifie différentes choses à différents endroits :

  • Dans un type, * signifie un pointeur. int est un type entier, int* est un pointeur vers un type entier
  • En tant qu'opérateur préfixe, * signifie « déréférencement ». name est un pointeur, *name est le résultat de son déréférencement (c'est-à-dire d'obtenir la valeur vers laquelle pointe le pointeur)
  • Bien sûr, en tant qu'opérateur infixe, * signifie 'multiplier'.

4voto

trojanfoe Points 61927

Le nom d'un tableau est l'adresse de son premier élément, donc name est un pointeur vers la mémoire contenant la chaîne "siva".

De plus, vous n'avez pas besoin d'un pointeur pour afficher un caractère ; vous choisissez simplement de l'utiliser directement à partir du tableau dans ce cas. Vous pouvez faire ceci à la place :

 char c = *name;
printf("%c\n", c);

1voto

Chhavi Points 11

Si vous souhaitez afficher un seul caractère, vous pouvez également utiliser name[0] au lieu d'utiliser le pointeur.

Cela vous servira, mais si vous souhaitez afficher la chaîne complète en utilisant %c , vous pouvez essayer ceci :

 #include<stdio.h>
void main()
{ 
    char name[]="siva";
    int i;
    for(i=0;i<4;i++)
    {
        printf("%c",*(name+i));
    }
} 

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