Aspas simples vs. as duplas em C ou C ++


Respostas:


282

Em C e em C ++, aspas simples identificam um único caractere, enquanto aspas duplas criam uma string literal. 'a'é um literal de um caractere único, enquanto "a"é um literal de cadeia de caracteres que contém um 'a'terminador e um nulo (que é uma matriz de 2 caracteres).

Em C ++, o tipo de um literal de caractere é char, mas observe que em C, o tipo de um literal de caractere é int, isto sizeof 'a'é, 4 em uma arquitetura em que as entradas são 32 bits (e CHAR_BIT é 8), enquanto sizeof(char)é 1 em qualquer lugar.


47

Alguns compiladores também implementam uma extensão que permite constantes com vários caracteres. O padrão C99 diz:

6.4.4.4p10: "O valor de uma constante de caractere inteiro contendo mais de um caractere (por exemplo, 'ab'), ou contendo um caractere ou sequência de escape que não é mapeada para um caractere de execução de byte único, é definido pela implementação. "

Isso pode ser assim, por exemplo:

const uint32_t png_ihdr = 'IHDR';

A constante resultante (no GCC, que implementa isso) tem o valor que você obtém pegando cada caractere e alterando-o para que o 'I' acabe nos bits mais significativos do valor de 32 bits. Obviamente, você não deve confiar nisso se estiver escrevendo código independente da plataforma.


7
Obrigado, acabei de ver isso em algum código e minha resposta só pode ser descrita como "WTF". Uso o GCC há 15 anos e nunca encontrei isso até agora.
eeeeaaii

+1 além dos cabeçalhos mágicos, geralmente usados ​​para avaliação da linha de comando.
Wolf

28

Aspas simples são caracteres ( char), as aspas duplas são seqüências terminadas em nulo ( char *).

char c = 'x';
char *s = "Hello World";

8
"olá mundo" é um const char *.
OldSchool

@Eiko, quando você coloca um * na frente de uma variável, por exemplo, * s como acima?
CodeGuru

@CodeGuru Você usa um * quando a variável é do tipo ponteiro. Nesse caso, 's' aponta para uma matriz de caracteres.
Eiko

16
  • 'x' é um número inteiro, representando o valor numérico da letra x no conjunto de caracteres da máquina
  • "x" é uma matriz de caracteres, com dois caracteres, consistindo em ‘x’ seguido por‘\0’

2
Tarde demais;) o que é realmente novo em sua resposta - em comparação com as que já foram fornecidas?
Wolf

10

Aspas simples são para um único caractere. Aspas duplas são para uma sequência (matriz de caracteres). Você pode usar aspas simples para criar uma string, um caractere de cada vez, se desejar.

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };

10

Eu estava bisbilhotando coisas como: int cc = 'cc'; Acontece que é basicamente uma cópia em bytes para um número inteiro. Portanto, a maneira de ver é que 'cc', que é basicamente 2 c, é copiado para diminuir 2 bytes do número inteiro cc. Se você estiver procurando por curiosidades,

printf("%d %d", 'c', 'cc'); would give:

99 25443

isso ocorre porque 25443 = 99 + 256 * 99

Portanto, 'cc' é uma constante de vários caracteres e não uma string.

Felicidades


8
  1. single quoteé para character;
  2. double quoteé para string.

6

Aspas duplas são para literais de string, por exemplo:

char str[] = "Hello world";

Aspas simples são para literais de um caractere, por exemplo:

char c = 'x';

EDITAR Como David afirmou em outra resposta, o tipo de um caractere literal é int.


obrigado . significa que o caractere é 1 byte sem caractere nulo '/ 0' no final. string contém caractere nulo no final.
Vishwanath Dalvi

2
@mr_eclair: Uma string literal sempre contém um terminador nulo implícito, mas tenha cuidado. Você poderia escrever algo como char str[] = {'H','e','l','l','o'};, e strque não possui um terminador nulo.
Oliver Charlesworth

nessa situação, strnão é uma cadeia de caracteres (pelo menos, não é uma cadeia de estilo C, definida como NTBS).
Steve Jessop

@ Steve: Entendido. Meu ponto no @mr_eclair é que nem tudo o que é char[](do qual as pessoas costumam chamar de "strings") é nulo.
Oliver Charlesworth

1
@OliCharlesworth este é - felizmente - não toda a verdade: estes são dois strings literais separados por um comentário: "hello" /*seamlessly connected to*/ "world". E isso pode fazer sentido para mensagens multilinhas comentadas.
Lobo

6

Em C aspas simples como 'a' indicam constantes de caracteres, enquanto "a" é uma matriz de caracteres, sempre terminada com o caractere 0


4

Aspas simples são usadas para caracteres, enquanto as aspas duplas são usadas para string.

Por exemplo..

 printf("%c \n",'a');
 printf("%s","Hello World");

Resultado

um Olá Mundo

Se você os usou no caso vice-versa e usou aspas simples para string e aspas duplas para caractere. Aqui, isso será resultado;

  printf("%c \n","a");
  printf("%s",'Hello World');

resultado :

para a primeira linha. Você terá um valor de lixo ou inesperado. ou poderá ter uma saída como esta ..

enquanto para a segunda declaração. Você não verá nada. Mais uma coisa. Se você tiver mais declarações após isso. Eles também não lhe darão resultado.

Nota: A linguagem PHP oferece flexibilidade para usar aspas simples e duplas com facilidade.


3

Aspas simples estão indicando um caractere, e duas vezes uma string.

Em Java, também é o mesmo.


2
Isso realmente não agrega valor à pergunta, pois essas informações já foram incluídas nas outras respostas.
Mike Precup

2

Use aspas simples com caracteres simples como:

char ch = 'a';

aqui 'a'é um caractere constante e é igual aoASCII valor de char a.

Use aspas duplas com cadeias de caracteres como:

char str[] = "foo";

aqui "foo" está uma string literal.

Não há problema em usar, "a"mas não em uso 'foo'

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.