strcmp, wcscmp, _mbscmp, _mbscmp_l

Vergleichen von Zeichenfolgen

Wichtig

_mbscmp und _mbscmp_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 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
);
int _mbscmp_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 für jede dieser Funktionen gibt die Ordinalbeziehung von string1 zu string2 an.

Wert Beziehung von zu string1string2
< 0 string1 ist kleiner als string2
0 string1 ist identisch mit string2
> 0 string1 ist größer als string2

Geben Sie bei einem Parametervalidierungsfehler zurück_NLSCMPERROR, _mbscmp_mbscmp_l der in und definiert <string.h> ist<mbstring.h>.

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. _mbscmp_l hat das gleiche Verhalten, verwendet jedoch den übergebenen Locale-Parameter anstelle des aktuellen -Locale. Weitere Informationen finden Sie unter Codepages. Wenn string1 oder string2 ein NULL-Zeiger ist, ruft _mbscmp, wie in Parameter Validation (Parameterüberprüfung) beschrieben, den Handler für ungültige Parameter auf. Wenn die weitere Ausführung zugelassen wird, geben _mbscmp und _mbscmp_l den Wert _NLSCMPERROR zurück und setzen errno auf EINVAL. strcmp und wcscmp überprüfen ihre Parameter nicht. Anderenfalls verhalten sich diese Funktionen identisch.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dies ändern, erfahren Sie unter Globaler Status in der CRT.

Zuordnung generischer Textroutinen

TCHAR.H Routine _UNICODE&_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 zur Kategorie finden Sie LC_COLLATE 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 Localesa steht das Zeichen "" (Wert 0x61)ä beispielsweise vor dem Zeichen "" (Wert 0xE4) im Zeichensatz, aber das Zeichen "ä" steht lexikografischer weise 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. Zwei Zeichenfolgen, die Zeichen enthalten, die sich zwischen "Z" und "a" in der ASCII-Tabelle befinden (""[, "\\", "]", "^", "", "_" und "`")), sind je nach Fall unterschiedlich. Beispielsweise vergleichen die beiden Zeichenfolgen "ABCDE" und "ABCD^" eine Möglichkeit, wenn der Vergleich klein geschrieben ("abcde" > "abcd^") ist, und auf die andere Weise ("ABCDE" < "ABCD^"), wenn der Vergleich Großbuchstaben ist.

Anforderungen

-Routine zurückgegebener Wert Erforderlicher Header
strcmp <string.h>
wcscmp <string.h> oder <wchar.h>
_mbscmp <mbstring.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Compatibility.

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 );
}
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
strcoll Funktionen
_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
strspn, wcsspn, _mbsspn, _mbsspn_l
strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l