Comillas simples versus comillas dobles en C o C ++


Respuestas:


282

En C y en C ++, las comillas simples identifican un solo carácter, mientras que las comillas dobles crean un literal de cadena. 'a'es un literal de un solo carácter, mientras que "a"es un literal de cadena que contiene un 'a'y un terminador nulo (que es una matriz de 2 caracteres).

En C ++, el tipo de literal de caracteres es char, pero tenga en cuenta que en C, el tipo de literal de caracteres es int, es sizeof 'a'decir, 4 en una arquitectura donde los ints son de 32 bits (y CHAR_BIT es 8), mientras que sizeof(char)es 1 en todas partes.


47

Algunos compiladores también implementan una extensión que permite constantes de varios caracteres. El estándar C99 dice:

6.4.4.4p10: "El valor de una constante de carácter entero que contiene más de un carácter (por ejemplo, 'ab'), o que contiene un carácter o secuencia de escape que no se asigna a un carácter de ejecución de un solo byte, está definido por la implementación. "

Esto podría verse así, por ejemplo:

const uint32_t png_ihdr = 'IHDR';

La constante resultante (en GCC, que implementa esto) tiene el valor que obtienes al tomar cada carácter y desplazarlo hacia arriba, de modo que 'I' termina en los bits más significativos del valor de 32 bits. Obviamente, no debe confiar en esto si está escribiendo código independiente de la plataforma.


77
Gracias, acabo de ver esto en algún código y mi respuesta solo se puede describir como "WTF". He estado usando GCC por intervalos durante 15 años y nunca me he encontrado con esto hasta ahora.
eeeeaaii

+1 además de los encabezados mágicos, a menudo utilizados para la evaluación de la línea de comandos.
Wolf

28

Las comillas simples son caracteres ( char), las comillas dobles son cadenas terminadas en nulo ( char *).

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

8
"hola mundo" es un const char *.
OldSchool

@Eiko, ¿cuándo pones un * delante de una variable, por ejemplo, * s como arriba?
CodeGuru

@CodeGuru Utiliza un * cuando la variable es un tipo de puntero. En este caso, 's' apunta a una serie de caracteres.
Eiko

16
  • 'x' es un número entero que representa el valor numérico de la letra x en el juego de caracteres de la máquina
  • "x"es una matriz de caracteres, de dos caracteres de longitud, que consiste en ‘x’seguido de‘\0’

2
Muy tarde;) ¿Qué es realmente nuevo en su respuesta, en comparación con los que ya se dieron?
Wolf

10

Las comillas simples son para un solo personaje. Las comillas dobles son para una cadena (matriz de caracteres). Si lo desea, puede usar comillas simples para construir una cadena de caracteres a la vez.

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

10

Estaba hurgando cosas como: int cc = 'cc'; Sucede que es básicamente una copia en bytes de un entero. Por lo tanto, la forma de verlo es que 'cc', que es básicamente 2 c's, se copia a 2 bytes inferiores del entero cc. Si buscas una trivia, entonces

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

99 25443

eso es porque 25443 = 99 + 256 * 99

Entonces 'cc' es una constante de múltiples caracteres y no una cadena.

Salud



6

Las comillas dobles son para literales de cadena, por ejemplo:

char str[] = "Hello world";

Las comillas simples son para literales de un solo carácter, por ejemplo:

char c = 'x';

EDITAR Como David dijo en otra respuesta, el tipo de carácter literal es int.


Gracias . significa que el carácter es 1 byte sin ningún carácter nulo '/ 0' al final ... la cadena contiene un carácter nulo al final.
Vishwanath Dalvi

2
@mr_eclair: un literal de cadena siempre contiene un terminador nulo implícito, pero tenga cuidado. Se podría escribir algo así char str[] = {'H','e','l','l','o'};, y strpodría no tener un terminador nulo.
Oliver Charlesworth

en esa situación, strno es una cadena (al menos, no es una cadena de estilo C, que se define como un NTBS).
Steve Jessop

@ Steve: Entendido. Mi punto a @mr_eclair fue que no todo lo que es un char[](que la gente suele llamar "cadenas") tiene terminación nula.
Oliver Charlesworth

1
@OliCharlesworth esto es - por suerte - no toda la verdad: estos son dos cadenas literales separados por un comentario: "hello" /*seamlessly connected to*/ "world". Y esto puede tener sentido para los mensajes de varias líneas comentados.
Wolf

6

En C las comillas simples como 'a' indican constantes de caracteres, mientras que "a" es una matriz de caracteres, siempre terminada con el carácter 0


4

La comilla simple se usa para el carácter, mientras que la comilla doble se usa para la cadena.

Por ejemplo..

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

Salida

un hola mundo

Si los usó en el caso de viceversa y usó comillas simples para cadenas y comillas dobles para caracteres. Aquí, este será el resultado;

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

salida:

para la primera línea. Tendrá un valor de basura o inesperado. O puede que tenga una salida como esta ...

mientras que para la segunda declaración. No veras nada. Una cosa más. Si tiene más declaración después de esto. Tampoco te darán ningún resultado.

Nota: el lenguaje PHP le brinda flexibilidad para usar comillas simples y dobles fácilmente.


3

Las comillas simples denotan un carácter, el doble denota una cadena.

En Java, también es lo mismo.


2
Esto realmente no agrega ningún valor a la pregunta, ya que esta información ya se ha incluido en las otras respuestas.
Mike Precup

2

Use comillas simples con caracteres simples como:

char ch = 'a';

aquí 'a'hay una constante de char y es igual a laASCII valor de char a.

Use comillas dobles con cadenas como:

char str[] = "foo";

aquí "foo" hay un literal de cadena.

Está bien usar "a"pero no está bien usar 'foo'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.