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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top