_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_locale
und 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.
Mapping generischer Textroutinen
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
Zeichenfolgenbearbeitung
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