strcmp, wcscmp, _mbscmp
Vergleichen von Zeichenfolgen
Wichtig
_mbscmp kann in Anwendungen nicht verwendet werden, die im Windows-Runtime ausgeführt werden.Weitere Informationen finden Sie unter CRT-Funktionen nicht mit /ZW unterstützt.
int strcmp(
const char *string1,
const char *string2
);
int wcscmp(
const wchar_t *string1,
const wchar_t *string2
);
int _mbscmp(
const unsigned char *string1,
const unsigned char *string2
);
Parameter
- string1, string2
Zu vergleichende mit NULL endende Zeichenfolgen.
Rückgabewert
Der Rückgabewert für jede dieser Funktionen gibt die Ordinalbeziehung von string1 zu string2 an.
Wert |
Verhältnis von string1 zu string2 |
---|---|
< 0 |
string1 ist kleiner als string2 |
0 |
string1 ist identisch mit string2 |
> 0 |
string1 ist größer als string2 |
Bei einem Parametervalidierungsfehler gibt _mbscmp _NLSCMPERROR zurück, was in <string.h> und <mbstring.h> definiert ist.
Hinweise
Die strcmp-Funktion führt einen Ordinalvergleich von string1 und string2 durch und gibt einen Wert, der die Beziehung angibt. wcscmp und _mbscmp sind Breitzeichen- bzw. Multibytezeichenversionen von strcmp. _mbscmp erkennt Multibyte-Zeichenfolgen entsprechend der aktuellen Multibyte-Codepage und gibt bei einem Fehler _NLSCMPERROR zurück. Weitere Informationen finden Sie unter Codepages. Wenn string1 oder string2 ein NULL-Zeiger ist, ruft _mbscmp, wie in Parametervalidierung beschrieben, den Handler für ungültige Parameter auf. Wenn die weitere Ausführung zugelassen wird, gibt _mbscmp _NLSCMPERROR zurück und setzt errno auf EINVAL. strcmp und wcscmp überprüfen ihre Parameter nicht. Diese drei Funktionen verhalten sich andernfalls identisch.
Zuordnung generischer Textroutinen
TCHAR.H-Routine |
_UNICODE und _MBCS nicht definiert. |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
Die strcmp-Funktionen unterscheiden sich von den strcoll-Funktionen dahingehend, dass die strcmp-Vergleiche ordinal sind und nicht vom Gebietsschema beeinflusst werden. strcoll vergleicht Zeichenfolgen lexikografisch mithilfe der LC_COLLATE-Kategorie des aktuellen Gebietsschemas. Weitere Informationen über die LC_COLLATE-Kategorie finden Sie unter setlocale, _wsetlocale.
Im Gebietsschema "C" ist die Reihenfolge der Zeichen im Zeichensatz (ASCII-Zeichensatz) die gleiche wie die lexikografische Zeichenreihenfolge. In anderen Gebietsschemata kann die Reihenfolge der Zeichen im Zeichensatz jedoch von der lexikografischen Reihenfolge abweichen. In bestimmten europäischen Gebietsschemas steht im Zeichensatz das Zeichen "a" (Wert 0x61) vor dem Zeichen "ä" (Wert 0xE4), das Zeichen "ä" steht jedoch lexikografisch gesehen jedoch vor dem Zeichen "a".
In Gebietsschemas, für die der Zeichensatz und die lexikografische Zeichenreihenfolge unterschiedlich sind, können Sie strcoll anstelle von strcmp für den lexikografischen Vergleich von Zeichenfolgen verwenden. Sie können auch strxfrm für die ursprünglichen Zeichenfolgen verwenden und dann strcmp für die resultierenden Zeichenfolgen verwenden.
Bei den strcmp-Funktionen wird die Groß-/Kleinschreibung beachtet. _stricmp, _wcsicmp und _mbsicmp vergleichen Zeichenfolgen, indem sie sie zuerst in Kleinbuchstaben konvertieren. Abhängig von der Großschreibung ist der Vergleich von zwei Zeichenfolgen mit Zeichen zwischen "Z" und "a" in der ASCII-Tabelle ('[', '\', ']', '^', '_', and '`') unterschiedlich. Beispielsweise werden die beiden Zeichenfolgen ""ABCDE"" und ""ABCD^"" in eine Richtung verglichen, wenn Kleinschreibung vorliegt (""abcde" > "abcd^"") und in die andere Richtung, wenn Großschreibung vorliegt (""ABCDE" < "ABCD^"").
Anforderungen
Routine |
Erforderlicher Header |
---|---|
strcmp |
<string.h> |
wcscmp |
<string.h> oder <wchar.h> |
_mbscmp |
<mbstring.h> |
Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Bibliotheken
Alle Versionen C-Laufzeitbibliotheken.
Beispiel
// crt_strcmp.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 );
}
.NET Framework-Entsprechung
System::String::CompareOrdinal
Siehe auch
Referenz
Zeichenfolgenbearbeitung (CRT)
_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l