Concatenar literales de cadena con cadenas
En C, el operador se puede utilizar para concatenar cadenas y literales de cadena. Sin embargo, esta funcionalidad tiene limitaciones que pueden generar confusión.
En la pregunta, el autor intenta concatenar las cadenas literales "Hello", ",world" y "!" de dos maneras diferentes. El primer ejemplo:
const string hello = "Hello";
const string message = hello ",world" "!";
En este caso, el código se compila y se ejecuta correctamente. Esto se debe a que el primer operando del operador es un objeto de cadena (hola), por lo que el compilador lo trata como una concatenación de una cadena y dos literales de cadena.
Sin embargo, el segundo ejemplo:
const string exclam = "!";
const string message = "Hello" ",world" exclam;
no se puede compilar. Esto se debe a que el operador situado más a la izquierda intenta concatenar dos cadenas literales, lo cual no está permitido. El compilador interpreta este código como:
const string message = (("Hello" ",world") exclam);
y la primera concatenación intenta agregar dos punteros ( const char* literals) juntos.
Para resolver este problema, el código debe:
Hacer que una de las dos primeras cadenas que se concatenan sea un objeto de cadena:
const string message = string("Hello") ",world" exclam;
Utilice paréntesis para forzar que el segundo se evalúe primero:
const string message = "Hello" (",world" exclam);
La razón por la que no puedes concatenar dos literales de cadena es porque los literales de cadena se almacenan como matrices de caracteres, que no se pueden sumar directamente. Cuando usas un literal de cadena en la mayoría de los contextos, se convierte en un puntero a su elemento inicial, que no es un operando válido para el operador.
Por lo tanto, es importante recordar que solo uno de los dos operandos más a la izquierda en una expresión de concatenación puede ser una cadena literal. Sin embargo, los literales de cadena se pueden concatenar colocándolos uno al lado del otro, como en:
"Hello" ",world"
"Hello,world"
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3