_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l

Esegue un confronto di stringhe senza distinzione tra maiuscole/minuscole.

Importante

_mbsicmp e _mbsicmp_l non possono essere usati nelle applicazioni eseguite in Windows Runtime. Per altre informazioni, vedere Funzioni CRT non supportate nelle app della piattaforma UWP (Universal Windows Platform).

Sintassi

int _stricmp(
   const char *string1,
   const char *string2
);
int _wcsicmp(
   const wchar_t *string1,
   const wchar_t *string2
);
int _mbsicmp(
   const unsigned char *string1,
   const unsigned char *string2
);
int _stricmp_l(
   const char *string1,
   const char *string2,
   _locale_t locale
);
int _wcsicmp_l(
   const wchar_t *string1,
   const wchar_t *string2,
   _locale_t locale
);
int _mbsicmp_l(
   const unsigned char *string1,
   const unsigned char *string2,
   _locale_t locale
);

Parametri

string1, string2
Stringhe che terminano con Null da confrontare.

locale
Impostazioni locali da usare.

Valore restituito

Il valore restituito indica la relazione di string1 con string2 come descritto di seguito.

Valore restituito Descrizione
< 0 string1 minore di string2
0 string1 uguale a string2
> 0 string1 maggiore di string2

In caso di errore, restituisce _mbsicmp_NLSCMPERROR, definito in <string.h> e <mbstring.h>.

Osservazioni:

La _stricmp funzione confronta string1 e string2 dopo la conversione di ogni carattere in minuscolo e restituisce un valore che indica la relazione. _stricmp è diverso da _stricoll perché il confronto con _stricmp è interessato solo da LC_CTYPE, che determina quali caratteri sono in maiuscolo e quali in minuscolo. La funzione _stricoll confronta le stringhe in base alle categorie LC_CTYPE e LC_COLLATE delle impostazioni locali, che includono sia i caratteri maiuscoli/minuscoli che l'ordine delle regole di confronto. Per altre informazioni sulla LC_COLLATE categoria, vedere setlocale e Categorie di impostazioni locali. Le versioni di queste funzioni senza il suffisso _l usano le impostazioni locali per il comportamento dipendente dalle impostazioni locali. Le versioni con il suffisso sono identiche, ma usano le impostazioni locali passate. Se le impostazioni locali non sono state impostate, vengono usate le impostazioni locali C. Per altre informazioni, vedere Locale.

Nota

_stricmp è pari a _strcmpi. Possono essere usati indifferentemente, ma _stricmp è lo standard preferito.

La funzione _strcmpi è equivalente a _stricmp ed è fornita solo per la compatibilità con le versioni precedenti.

_stricmp esegue i confronti con caratteri minuscoli, pertanto può produrre comportamenti imprevisti.

Per illustrare quando la conversione _stricmp di maiuscole e minuscole influisce sul risultato di un confronto, si supponga di avere le due stringhe JOHNSTON e JOHN_HENRY. La stringa JOHN_HENRY verrà considerata minore di JOHNSTON perché "_" ha un valore ASCII inferiore rispetto a un valore S minuscolo. In effetti, qualsiasi carattere con valore ASCII compreso tra 91 e 96 verrà considerato minore di qualsiasi lettera.

Se la strcmp funzione viene usata invece di _stricmp, JOHN_HENRY sarà maggiore di JOHNSTON.

_wcsicmp e _mbsicmp sono versioni con caratteri wide e caratteri multibyte di _stricmp. Gli argomenti e il valore restituito di sono stringhe di _wcsicmp caratteri wide. Gli argomenti e il valore restituito di sono stringhe di _mbsicmp caratteri multibyte. _mbsicmp riconosce le sequenze di caratteri multibyte in base alla tabella codici multibyte corrente e restituisce _NLSCMPERROR in caso di errore. Per altre informazioni, vedere Tabelle codici. A parte ciò, queste tre funzioni si comportano in modo identico.

_wcsicmp e wcscmp si comportano in modo identico, ad eccezione del fatto che wcscmp non converte i relativi argomenti in lettere minuscole prima di confrontarli. _mbsicmp e _mbscmp si comportano in modo identico, ad eccezione del fatto che _mbscmp non converte i relativi argomenti in lettere minuscole prima di confrontarli.

Dovrai chiamare setlocale per _wcsicmp lavorare con i caratteri Latin 1. Le impostazioni locali C sono effettive per impostazione predefinita, quindi, ad esempio, ä non sarà uguale a Ä. Chiamare setlocale con qualsiasi impostazione locale ad eccezione di C prima della chiamata a _wcsicmp. Il seguente esempio mostra in che modo _wcsicmp sia sensibile alle impostazioni locali:

// crt_stricmp_locale.c
By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md).

#include <string.h>
#include <stdio.h>
#include <locale.h>

int main() {
   setlocale(LC_ALL,"C");   // in effect by default
   printf("\n%d",_wcsicmp(L"ä", L"Ä"));   // compare fails
   setlocale(LC_ALL,"");
   printf("\n%d",_wcsicmp(L"ä", L"Ä"));   // compare succeeds
}

Un'alternativa consiste nel chiamare _create_locale_wcreate_localee passare l'oggetto impostazioni locali restituite come parametro a ._wcsicmp_l

Tutte queste funzioni convalidano i relativi parametri. Se o string1string2 sono puntatori Null, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri . Se l'esecuzione può continuare, queste funzioni restituiscono _NLSCMPERROR e impostano errno su EINVAL.

Mapping di routine di testo generico

TCHAR.H Routine _UNICODE e _MBCS non definito _MBCS Definito _UNICODE Definito
_tcsicmp _stricmp _mbsicmp _wcsicmp

Requisiti

Ciclo Intestazione obbligatoria
_stricmp, _stricmp_l <string.h>
_wcsicmp, _wcsicmp_l <string.h> oppure <wchar.h>
_mbsicmp, _mbsicmp_l <mbstring.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// crt_stricmp.c

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown dog jumps over the lazy fox";

int main( void )
{
   char tmp[20];
   int result;

   // Case sensitive
   printf( "Compare strings:\n   %s\n   %s\n\n", string1, string2 );
   result = strcmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof(tmp), "less than" );
   else
      strcpy_s( tmp, _countof(tmp), "equal to" );
   printf( "   strcmp:   String 1 is %s string 2\n", tmp );

   // Case insensitive (could use equivalent _stricmp)
   result = _stricmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof(tmp), "less than" );
   else
      strcpy_s( tmp, _countof(tmp), "equal to" );
   printf( "   _stricmp:  String 1 is %s string 2\n", tmp );
}
Compare strings:
   The quick brown dog jumps over the lazy fox
   The QUICK brown dog jumps over the lazy fox

   strcmp:   String 1 is greater than string 2
   _stricmp:  String 1 is equal to string 2

Vedi anche

Manipolazione delle stringhe
memcmp, wmemcmp
_memicmp, _memicmp_l
strcmp, wcscmp, _mbscmp
Funzioni strcoll
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l
strspn, wcsspn, _mbsspn, _mbsspn_l