Pergunta

Eu tenho uma matriz de caracteres e eu estou tentando descobrir se ele corresponde a um literal cadeia, por exemplo:

char value[] = "yes";
if(value == "yes") {
   // code block
} else {
   // code block
}

Isto resultou no seguinte erro: comparação com corda resultados literais no comportamento não especificado. Eu também tentei algo como:

char value[] = "yes";
if(strcmp(value, "yes")) {
   // code block
} else {
   // code block
}

Esta não deu qualquer erros do compilador, mas não está se comportando como esperado.

Foi útil?

Solução

std::strcmp retorna 0 se as strings são iguais.

Outras dicas

Verifique a documentação para strcmp. Dica:. Ele não retorna um valor booleano

ETA: == não funciona no geral, porque cstr1 == cstr2 compara ponteiros , de modo que a comparação só será verdadeiro se cstr1 e ponto cstr2 para o mesmo local de memória, mesmo se acontecer de ambos referem-se cordas que são lexicographically igual. O que você tentou (comparando um cstring a um literal, por exemplo cstr == "yes") especialmente não vai funcionar, porque o padrão não exige que ele. Em uma implementação razoável eu duvido que ele iria explodir, mas cstr == "yes" é improvável que alguma vez ter sucesso, porque cstr é improvável para se referir ao endereço que as vidas string constante "yes" em.

strcmp retorna um valor tri-state para indicar que a ordem relativa das duas cordas são. Ao fazer uma chamada como strcmp (a, b), a função retorna

  • um valor <0, quando a
  • 0 quando a == b
  • um valor> 0 quando a> b
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top