Comparando arrays de caracteres e strings literais em C ++
-
08-07-2019 - |
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.
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