"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que a concatenação de strings usando + falhou com literais de string?

Por que a concatenação de strings usando + falhou com literais de string?

Publicado em 2024-11-05
Navegar:881

Why Did String Concatenation Using   Fail with String Literals?

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"
Declaração de lançamento Este artigo foi reimpresso em: 1729729822 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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