Concatenando String Literais com Strings
Em C , o operador pode ser usado para concatenar strings e literais de string. No entanto, existem limitações para esta funcionalidade que podem causar confusão.
Na pergunta, o autor tenta concatenar as strings literais "Hello", ",world" e "!" de duas maneiras diferentes. O primeiro exemplo:
const string hello = "Hello";
const string message = hello ",world" "!";
Nesse caso, o código é compilado e executado com sucesso. Isso ocorre porque o primeiro operando do operador é um objeto string (hello), então o compilador trata isso como uma concatenação de uma string e dois literais de string.
No entanto, o segundo exemplo:
const string exclam = "!";
const string message = "Hello" ",world" exclam;
falha ao compilar. Isso ocorre porque o operador mais à esquerda está tentando concatenar duas strings literais, o que não é permitido. O compilador interpreta esse código como:
const string message = (("Hello" ",world") exclam);
e a primeira concatenação está tentando adicionar dois ponteiros ( const char* literais) juntos.
Para resolver esse problema, o código deve:
Tornar uma das duas primeiras strings sendo concatenadas um objeto de string:
const string message = string("Hello") ",world" exclam;
Use parênteses para forçar o segundo a ser avaliado primeiro:
const string message = "Hello" (",world" exclam);
O motivo pelo qual você não pode concatenar dois literais de string usando é porque os literais de string são armazenados como matrizes de caracteres, que não podem ser adicionadas diretamente. Quando você usa uma string literal na maioria dos contextos, ela é convertida em um ponteiro para seu elemento inicial, que não é um operando válido para o operador.
Portanto, é importante lembrar que apenas um dos dois operandos mais à esquerda em uma expressão de concatenação pode ser uma string literal. Literais de string podem, no entanto, ser concatenados colocando-os um ao lado do outro, como em:
"Hello" ",world"
"Hello,world"
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3