¿Cuál es el tamaño de los caracteres en C y C ++? Hasta donde sé, el tamaño de char es de 1 byte en C y 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;
}
Sin sorpresas, ambos dan la salida: Size of char : 1
Ahora sabemos que los personajes son representados como 'a'
, 'b'
, 'c'
, '|'
, ... Así que acaba de modificar los códigos anteriores a éstos:
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
¿Por qué sizeof('a')
devuelve diferentes valores en C y C ++?
"%|"
formato requiere unint
argumento (o algo que promuevaint
).sizeof
produce un resultado de tiposize_t
. Conviértase aint
usar un reparto o, si su implementación lo admite, use"%zu"
.Respuestas:
En C, el tipo de una constante de carácter como
'a'
es en realidad unint
, con un tamaño de 4 (o algún otro valor dependiente de la implementación). En C ++, el tipo eschar
, con un tamaño de 1. Esta es una de las muchas pequeñas diferencias entre los dos lenguajes.fuente
int
achar
, lo que explica el comportamiento. :)Como dijo Paul, es porque
'a'
es unint
en C pero unchar
en C ++.Cubro esa diferencia específica entre C y C ++ en algo que escribí hace unos años, en: http://david.tribble.com/text/cdiffs.htm
fuente
En C, el tipo de literales de caracteres son int y char en C ++. Esto se requiere en C ++ para soportar la sobrecarga de funciones . Ver este ejemplo:
Salida:
fuente
En lenguaje C , el carácter literal no es un
char
tipo. C considera el carácter literal como entero. Entonces, no hay diferencia entresizeof('a')
ysizeof(1)
.Entonces, el literal sizeof de caracteres es igual a sizeof entero en C.
En lenguaje C ++ , el carácter literal es tipo de
char
. La cppreference dice:Entonces, en C ++ el literal de caracteres es un tipo de
char
. entonces, el tamaño del carácter literal en C ++ es un byte.Alos, en sus programas, ha utilizado un especificador de formato incorrecto para el
sizeof
operador.C11 §7.21.6.1 (P9):
Por lo tanto, debe usar el
%zu
especificador de formato en lugar de%d
, de lo contrario, es un comportamiento indefinido en C.fuente
%zu
no es compatible con muchas plataformas, pero mejor portabilidad, uso(int)sizeof(char)
y formato%d
char
tipo está firmado o no de forma predeterminada.