Quand dois-je utiliser des guillemets simples et des guillemets doubles en programmation C ou C ++?
Quand dois-je utiliser des guillemets simples et des guillemets doubles en programmation C ou C ++?
Réponses:
En C et en C ++, les guillemets simples identifient un seul caractère, tandis que les guillemets doubles créent un littéral de chaîne. 'a'
est un seul littéral de caractère, tandis que "a"
est un littéral de chaîne contenant un 'a'
et un terminateur nul (c'est-à-dire un tableau de 2 caractères).
En C ++, le type d'un littéral de caractère est char
, mais notez qu'en C, le type d'un littéral de caractère est int
, c'est-à- sizeof 'a'
dire 4 dans une architecture où les entiers sont 32 bits (et CHAR_BIT est 8), tandis qu'il sizeof(char)
est 1 partout.
Certains compilateurs implémentent également une extension, qui autorise les constantes à plusieurs caractères. La norme C99 dit:
6.4.4.4p10: "La valeur d'une constante de caractère entier contenant plus d'un caractère (par exemple, 'ab'), ou contenant un caractère ou une séquence d'échappement qui ne correspond pas à un caractère d'exécution à un octet, est définie par l'implémentation. "
Cela pourrait ressembler à ceci, par exemple:
const uint32_t png_ihdr = 'IHDR';
La constante résultante (dans GCC, qui implémente cela) a la valeur que vous obtenez en prenant chaque caractère et en le déplaçant vers le haut, de sorte que «I» se retrouve dans les bits les plus significatifs de la valeur 32 bits. Évidemment, vous ne devriez pas vous en remettre à cela si vous écrivez du code indépendant de la plate-forme.
Les guillemets simples sont des caractères ( char
), les guillemets doubles sont des chaînes terminées par null ( char *
).
char c = 'x';
char *s = "Hello World";
const char *
.
'x'
est un entier, représentant la valeur numérique de la lettre x dans le jeu de caractères de la machine"x"
est un tableau de caractères de deux caractères composé de ‘x’
suivi de‘\0’
Les guillemets simples sont pour un seul caractère. Les guillemets doubles correspondent à une chaîne (tableau de caractères). Vous pouvez utiliser des guillemets simples pour créer une chaîne un caractère à la fois, si vous le souhaitez.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Je fouillais des trucs comme: int cc = 'cc'; Il se trouve que c'est essentiellement une copie d'octets vers un entier. Par conséquent, la façon de voir les choses est que «cc», qui est essentiellement 2 c, est copié pour réduire 2 octets de l'entier cc. Si vous cherchez un jeu-questionnaire, alors
printf("%d %d", 'c', 'cc'); would give:
99 25443
c'est parce que 25443 = 99 + 256 * 99
Donc «cc» est une constante à plusieurs caractères et non une chaîne.
À votre santé
Les guillemets doubles sont pour les littéraux de chaîne, par exemple:
char str[] = "Hello world";
Les guillemets simples sont pour les littéraux à caractère unique, par exemple:
char c = 'x';
EDIT Comme David l'a déclaré dans une autre réponse, le type d'un caractère littéral est int
.
char str[] = {'H','e','l','l','o'};
, et vous str
n'auriez pas de terminateur nul.
str
n'est pas une chaîne (du moins, pas une chaîne de style C, qui est définie comme un NTBS).
char[]
(que les gens considèrent souvent comme des "chaînes") n'est pas nul.
"hello" /*seamlessly connected to*/ "world"
. Et cela peut avoir un sens pour les messages multilignes commentés.
En C, les guillemets simples tels que «a» indiquent des constantes de caractères tandis que «a» est un tableau de caractères, toujours terminé par le caractère 0
Le guillemet simple est utilisé pour le caractère, tandis que le guillemet double est utilisé pour la chaîne.
printf("%c \n",'a');
printf("%s","Hello World");
un Hello World
Si vous les avez utilisés dans le cas inverse et que vous avez utilisé un guillemet simple pour la chaîne et un guillemet double pour le caractère. Ici, ce sera le résultat;
printf("%c \n","a");
printf("%s",'Hello World');
pour la première ligne.Vous aurez une valeur de déchets ou inattendue.ou vous pouvez avoir une sortie comme celle-ci.
tandis que pour la deuxième déclaration. Vous ne verrez rien. Encore une chose. Si vous avez plus de déclaration après cela. Ils ne vous donneront également aucun résultat.
Remarque: le langage PHP vous donne la possibilité d'utiliser facilement les guillemets simples et doubles.
Les guillemets simples désignent un caractère, les doubles indiquent une chaîne.
En Java, c'est aussi la même chose.
Utilisez un guillemet simple avec un seul caractère comme:
char ch = 'a';
voici 'a'
une constante char et est égale à la ASCII
valeur de char a.
Utilisez des guillemets doubles avec des chaînes comme:
char str[] = "foo";
voici "foo"
un littéral de chaîne.
C'est correct à utiliser, "a"
mais ce n'est pas correct à utiliser 'foo'