_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l

Führt einen Vergleich von Zeichenfolgen ohne Beachtung der Groß-/Kleinschreibung durch.

Wichtig

_mbsicmp und _mbsicmp_l können nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).

Syntax

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
);

Parameter

string1, string2
Zu vergleichende mit NULL endende Zeichenfolgen.

locale
Zu verwendendes Gebietsschema.

Rückgabewert

Der Rückgabewert gibt die Beziehung zwischen string1 und string2 wie folgt an.

Rückgabewert Beschreibung
< 0 string1 kleiner als string2
0 string1 identisch mit string2
> 0 string1 größer als string2

Gibt einen Fehler zurück_NLSCMPERROR, _mbsicmp der in <string.h> und <mbstring.h>definiert ist.

Hinweise

Die _stricmp Funktion vergleicht string1 und string2 nach der Konvertierung jedes Zeichens in Kleinbuchstaben und gibt einen Wert zurück, der die Beziehung angibt. _stricmp unterscheidet sich von _stricoll dahingehend, dass der _stricmp-Vergleich nur von LC_CTYPE beeinflusst wird, durch den bestimmt wird, welche Zeichen Großbuchstaben und welche Kleinbuchstaben sind. Die _stricoll-Funktion vergleicht Zeichenfolgen gemäß der Kategorien LC_CTYPE und LC_COLLATE des Gebietsschemas, das sowohl Groß-/Kleinschreibung als auch die Sortierreihenfolge umfasst. Weitere Informationen zur LC_COLLATE Kategorie finden Sie unter setlocale den Gebietsschemakategorien. Die Versionen dieser Funktionen ohne das _l-Suffix verwenden das aktuelle Gebietsschema für gebietsschemaabhängiges Verhalten. Die Versionen mit dem Suffix sind identisch, verwenden allerdings das übergebene Gebietsschema. Wenn das Gebietsschema nicht festgelegt wurde, wird das Gebietsschema C verwendet. Weitere Informationen finden Sie unter Locale.

Hinweis

_stricmp entspricht _strcmpi. Sie sind austauschbar, _stricmp ist jedoch der bevorzugte Standard.

Die _strcmpi-Funktion entspricht _stricmp und wird nur aus Gründen der Abwärtskompatibilität bereitgestellt.

Da _stricmp Kleinbuchstabenvergleiche ausführt, kann es zu unerwartetem Verhalten kommen.

Um zu veranschaulichen, wann sich die Fallkonvertierung auf _stricmp das Ergebnis eines Vergleichs auswirkt, gehen Sie davon aus, dass Sie über die beiden Zeichenfolgen JOHNSTON verfügen und JOHN_HENRY. Die Zeichenfolge JOHN_HENRY wird als kleiner betrachtet, als JOHNSTON weil der "_" einen niedrigeren ASCII-Wert aufweist als ein Kleinbuchstaben S. Tatsächlich gilt jedes Zeichen mit einem ASCII-Wert zwischen 91 und 96 als kleiner als jeder Buchstabe.

Wenn die strcmp Funktion anstelle von _stricmp, JOHN_HENRY wird größer als JOHNSTON.

_wcsicmp und _mbsicmp sind Breitzeichen- und Multibytezeichenversionen von _stricmp. Die Argumente und der Rückgabewert _wcsicmp sind Zeichenfolgen mit breitem Zeichen. Die Argumente und der Rückgabewert sind _mbsicmp Multibyte-Zeichenfolgen. _mbsicmp erkennt Multibyte-Zeichenfolgen entsprechend der aktuellen Multibyte-Codepage und gibt bei einem Fehler _NLSCMPERROR zurück. Weitere Informationen finden Sie unter Codeseiten. Diese drei Funktionen verhalten sich andernfalls identisch.

_wcsicmp und wcscmp verhalten sich identisch, mit der Ausnahme, dass wcscmp die Argumente nicht in Kleinbuchstaben konvertiert werden, bevor sie verglichen werden. _mbsicmp und _mbscmp verhalten sich identisch, mit der Ausnahme, dass _mbscmp die Argumente nicht in Kleinbuchstaben konvertiert werden, bevor sie verglichen werden.

Sie müssen dazu auffordern setlocale_wcsicmp , mit lateinischen 1 Zeichen zu arbeiten. Das Gebietsschema "C" ist standardmäßig wirksam, sodass ä z. B. nicht gleich Ä ist. Rufen Sie setlocale mit einem anderen Gebietsschema als dem C-Gebietsschema auf, bevor Sie _wcsicmp aufrufen. Das folgende Beispiel zeigt, wie _wcsicmp vom Gebietsschema abhängt:

// 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
}

Eine Alternative besteht darin, _wcreate_locale das zurückgegebene Gebietsschemaobjekt als Parameter aufzurufen _create_localeund an ._wcsicmp_l

Mit allen diesen Funktionen werden ihre Parameter überprüft. Wenn es sich um string1 Nullzeiger handelt string2 , wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen _NLSCMPERROR zurück und stellen errno auf EINVAL ein.

Generische Textroutinzuordnungen

TCHAR.H Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tcsicmp _stricmp _mbsicmp _wcsicmp

Anforderungen

Routine Erforderlicher Header
_stricmp, _stricmp_l <string.h>
_wcsicmp, _wcsicmp_l <string.h> oder <wchar.h>
_mbsicmp, _mbsicmp_l <mbstring.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// 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

Siehe auch

Zeichenfolgenmanipulation
memcmp, wmemcmp
_memicmp, _memicmp_l
strcmp, wcscmp, _mbscmp
strcoll-Funktionen
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