Confronto di array di caratteri e valori letterali di stringa in C ++
-
08-07-2019 - |
Domanda
Ho un array di caratteri e sto cercando di capire se corrisponde a una stringa letterale, ad esempio:
char value[] = "yes";
if(value == "yes") {
// code block
} else {
// code block
}
Ciò ha comportato il seguente errore: il confronto con una stringa letterale comporta un comportamento non specificato. Ho anche provato qualcosa del tipo:
char value[] = "yes";
if(strcmp(value, "yes")) {
// code block
} else {
// code block
}
Ciò non ha prodotto errori del compilatore ma non si comporta come previsto.
Soluzione
std::strcmp
restituisce 0 se le stringhe sono uguali.
Altri suggerimenti
Controlla la documentazione per strcmp. Suggerimento: non restituisce un valore booleano.
ETA: ==
non funziona in generale perché cstr1 == cstr2
confronta puntatori , quindi tale confronto sarà vero solo se cstr1
e cstr2
puntano alla stessa posizione di memoria, anche se entrambi si riferiscono a stringhe che sono lessicograficamente uguali. Quello che hai provato (confrontando un cstring con un letterale, ad esempio cstr == "yes"
) specialmente non funzionerà, perché lo standard non lo richiede. In un'implementazione ragionevole dubito che esploderà, ma è improbabile che cstr
abbia mai successo, perché è improbabile che "yes"
faccia riferimento all'indirizzo in cui risiede la costante di stringa <=>.
strcmp restituisce un valore a tre stati per indicare quale sia l'ordine relativo delle due stringhe. Quando si effettua una chiamata come strcmp (a, b), la funzione ritorna
- un valore < 0 quando un & Lt; b
- 0 quando a == b
- un valore > 0 quando un & Gt; b