Compare characters of two strings without regard to case.
int _strnicmp( const char *string1, const char *string2, size_t count );
int _wcsnicmp( const wchar_t *string1, const wchar_t *string2, size_t count );
int _mbsnicmp( const unsigned char *string1, const unsigned char *string2, size_t count );
Routine | Required Header | Compatibility |
_strnicmp | <string.h> | Win 95, Win NT |
_wcsnicmp | <string.h> or <wchar.h> | Win 95, Win NT |
_mbsnicmp | <mbstring.h> | Win 95, Win NT |
For additional compatibility information, see Compatibility in the Introduction.
Libraries
LIBC.LIB | Single thread static library, retail version |
LIBCMT.LIB | Multithread static library, retail version |
MSVCRT.LIB | Import library for MSVCRT.DLL, retail version |
Return Value
The return value indicates the relationship between the substrings as follows.
Return Value | Description |
< 0 | string1 substring less than string2 substring |
0 | string1 substring identical to string2 substring |
> 0 | string1 substring greater than string2 substring |
On an error, _mbsnicmp returns _NLSCMPERROR, which is defined in STRING.H and MBSTRING.H.
Parameters
string1, string2
Null-terminated strings to compare
count
Number of characters to compare
Remarks
The _strnicmp function lexicographically compares, at most, the first count characters of string1 and string2. The comparison is performed without regard to case; _strnicmp is a case-insensitive version of strncmp. The comparison ends if a terminating null character is reached in either string before count characters are compared. If the strings are equal when a terminating null character is reached in either string before count characters are compared, the shorter string is lesser.
Two strings containing characters located between 'Z' and 'a' in the ASCII table ('[', '\', ']', '^', '_', and '`') compare differently, depending on their case. For example, the two strings "ABCDE"
and "ABCD^"
compare one way if the comparison is lowercase ("abcde"
> "abcd^"
) and the other way ("ABCDE"
< "ABCD^"
) if it is uppercase.
_wcsnicmp and _mbsnicmp are wide-character and multibyte-character versions of _strnicmp. The arguments and return value of _wcsnicmp are wide-character strings; those of _mbsnicmp are multibyte-character strings. _mbsnicmp recognizes multibyte-character sequences according to the current multibyte code page and returns _NLSCMPERROR on an error. For more information, see Code Pages. These three functions behave identically otherwise. These functions are not affected by the current locale setting.
Generic-Text Routine Mappings
TCHAR.H Routine | _UNICODE & _MBCS Not Defined | _MBCS Defined | _UNICODE Defined |
_tcsncicmp | _strnicmp | _mbsnbicmp | _wcsnicmp |
_tcsnicmp | _strnicmp | _mbsnbicmp | _wcsnicmp |
Example
/* STRNCMP.C */
#include <string.h>
#include <stdio.h>
char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown fox jumps over the lazy dog";
void main( void )
{
char tmp[20];
int result;
printf( "Compare strings:\n\t\t%s\n\t\t%s\n\n", string1, string2 );
printf( "Function:\tstrncmp (first 10 characters only)\n" );
result = strncmp( string1, string2 , 10 );
if( result > 0 )
strcpy( tmp, "greater than" );
else if( result < 0 )
strcpy( tmp, "less than" );
else
strcpy( tmp, "equal to" );
printf( "Result:\t\tString 1 is %s string 2\n\n", tmp );
printf( "Function:\tstrnicmp _strnicmp (first 10 characters only)\n" );
result = _strnicmp( string1, string2, 10 );
if( result > 0 )
strcpy( tmp, "greater than" );
else if( result < 0 )
strcpy( tmp, "less than" );
else
strcpy( tmp, "equal to" );
printf( "Result:\t\tString 1 is %s string 2\n\n", tmp );
}
Output
Compare strings:
The quick brown dog jumps over the lazy fox
The QUICK brown fox jumps over the lazy dog
Function: strncmp (first 10 characters only)
Result: String 1 is greater than string 2
Function: _strnicmp (first 10 characters only)
Result: String 1 is equal to string 2
See Also strcat, strcmp, strcpy, strncat, strncmp, strncpy, strrchr, _strset, strspn