Qual é o tamanho do caractere em C e C ++? Tanto quanto eu sei, o tamanho do caractere é de 1 byte em C e 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;
}
Sem surpresas, os dois fornecem a saída: Size of char : 1
Agora sabemos que os caracteres são representados como 'a'
, 'b'
, 'c'
, '|'
, ... Então, eu só modificou os códigos acima para estes:
Em 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
Em 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 que os sizeof('a')
valores diferentes retornam em C e C ++?
"%|"
formato requer umint
argumento (ou algo que promovaint
).sizeof
produz um resultado de tiposize_t
. Converta paraint
usar uma conversão ou, se sua implementação suportar, use"%zu"
.Respostas:
Em C, o tipo de constante de caractere como
'a'
na verdade é umint
, com tamanho de 4 (ou algum outro valor dependente da implementação). Em C ++, o tipo échar
, com tamanho de 1. Essa é uma das muitas pequenas diferenças entre os dois idiomas.fonte
int
parachar
, o que explica o comportamento. :)Como Paul afirmou, é porque
'a'
é umint
em C, mas umchar
em C ++.Cubro essa diferença específica entre C e C ++ em algo que escrevi há alguns anos, em: http://david.tribble.com/text/cdiffs.htm
fonte
Em C, o tipo de literal de caracteres é int e char em C ++. Isso é necessário em C ++ para dar suporte à sobrecarga de funções . Veja este exemplo:
Resultado:
fonte
Na linguagem C , o caractere literal não é um
char
tipo. C considera o caractere literal como inteiro. Portanto, não há diferença entresizeof('a')
esizeof(1)
.Portanto, o tamanho literal do caractere é igual ao tamanho inteiro em C.
Na linguagem C ++ , o caractere literal é o tipo de
char
. A cppreference diz:Portanto, no caracter C ++, literal é um tipo de
char
. portanto, o tamanho do caractere literal em C ++ é de um byte.Além disso, em seus programas, você utilizou um especificador de formato errado para o
sizeof
operador.C11 §7.21.6.1 (P9):
Portanto, você deve usar o
%zu
especificador de formato em vez de%d
, caso contrário, é um comportamento indefinido em C.fonte
%zu
não é suportada em muitas plataformas, mas melhor portabilidade, a utilização(int)sizeof(char)
eo formato%d
char
tipo é assinado ou não por padrão.