Quelle est la taille des caractères en C et C ++? Autant que je sache, la taille de char est de 1 octet en C et C ++.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Pas de surprise, les deux donnent la sortie: Size of char : 1
Maintenant , nous savons que les personnages sont représentés comme 'a'
, 'b'
, 'c'
, '|'
, ... Je viens donc modifié les codes ci - dessus pour ceux - ci:
En C:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
En C ++:
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
Pourquoi le sizeof('a')
renvoie des valeurs différentes en C et C ++?
"%|"
format nécessite unint
argument (ou quelque chose qui promeutint
).sizeof
donne un résultat de typesize_t
. Soit convertir enint
utilisant un cast ou, si votre implémentation le prend en charge, utilisez"%zu"
.Réponses:
En C, le type d'une constante de caractère comme
'a'
est en fait unint
, avec une taille de 4 (ou une autre valeur dépendante de l'implémentation). En C ++, le type estchar
, avec une taille de 1. C'est l'une des nombreuses petites différences entre les deux langages.la source
int
àchar
, ce qui explique le comportement. :)Comme Paul l'a dit, c'est parce que
'a'
c'est unint
en C mais unchar
en C ++.Je couvre cette différence spécifique entre C et C ++ dans quelque chose que j'ai écrit il y a quelques années, à: http://david.tribble.com/text/cdiffs.htm
la source
En C, les types de littéraux de caractères sont int et char en C ++. C'est en C ++ nécessaire pour prendre en charge la surcharge de fonctions . Voir cet exemple:
Production:
la source
En langage C , le littéral de caractère n'est pas un
char
type. C considère le caractère littéral comme un entier. Il n'y a donc pas de différence entresizeof('a')
etsizeof(1)
.Ainsi, le littéral sizeof est égal à sizeof entier en C.
En langage C ++ , le littéral de caractère est le type de
char
. La cppreference dit:Ainsi, en C ++, le littéral de caractères est un type de
char
. ainsi, la taille du littéral de caractère en C ++ est d'un octet.Alos, dans vos programmes, vous avez utilisé un spécificateur de format incorrect pour l'
sizeof
opérateur.C11 §7.21.6.1 (P9):
Donc, vous devez utiliser un
%zu
spécificateur de format au lieu de%d
, sinon c'est un comportement non défini en C.la source
%zu
n'est pas pris en charge sur de nombreuses plates-formes, mais une meilleure portabilité, utilisation(int)sizeof(char)
et format%d
char
type est signé ou non par défaut.