Pregunta

Tengo una matriz de caracteres y estoy tratando de averiguar si coincide con un literal de cadena, por ejemplo:

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

Esto dio como resultado el siguiente error:comparación con el literal de cadena de resultados, en los no especificados de comportamiento.También he probado algo como:

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

Esto no se producen errores de compilación, pero no se comporta como se espera.

¿Fue útil?

Solución

std::strcmp devuelve 0 si las cadenas son iguales.

Otros consejos

Consulte la documentación de strcmp.Sugerencia:no devuelve un valor booleano.

ETA: == no trabajo en general porque cstr1 == cstr2 compara los punteros, por lo que la comparación sólo será cierto si cstr1 y cstr2 punto a la misma ubicación de memoria, incluso si se encuentran a ambos se refieren a las cadenas que son lexicográficamente igual.Lo que has intentado (la comparación de un objeto cstring literal, por ejemplo, cstr == "yes") especialmente no funciona, porque la norma no lo necesita para.En una razonable aplicación dudo que se iba a explotar, pero cstr == "yes" es poco probable que tenga éxito, porque cstr es poco probable que se refieren a la dirección que la constante de cadena "yes" vive en.

strcmp devuelve un valor de tres estados para indicar cuál es el orden relativo de las dos cadenas. Al realizar una llamada como strcmp (a, b), la función devuelve

  • un valor < 0 cuando a & Lt; b
  • 0 cuando a == b
  • un valor > 0 cuando a & Gt; b
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top