user-0 提问: strcmp有宽字符版本吗？或者有没有可代替的函数？

回复:
user: user-1
content: String Manipulation These routines operate on null-terminated single-byte character, wide-character, and multibyte-character strings. Use the buffer-manipulation routines, described in Buffer Manipulation, to work with character arrays that do not end with a null character.  String-Manipulation Routines  Routine Use  _mbscoll, _mbsicoll, _mbsncoll, _mbsnicoll Compare two multibyte-character strings using multibyte code page information (_mbsicoll and _mbsnicoll are case-insensitive)  _mbsdec, _strdec, _wcsdec Move string pointer back one character  _mbsinc, _strinc, _wcsinc Advance string pointer by one character  _mbslen Get number of multibyte characters in multibyte-character string; dependent upon OEM code page  _mbsnbcat Append, at most, first n bytes of one multibyte-character string to another  _mbsnbcmp Compare first n bytes of two multibyte-character strings  _mbsnbcnt Return number of multibyte-character bytes within supplied character count  _mbsnbcpy Copy n bytes of string  _mbsnbicmp Compare n bytes of two multibyte-character strings, ignoring case  _mbsnbset Set first n bytes of multibyte-character string to specified character  _mbsnccnt Return number of multibyte characters within supplied byte count  _mbsnextc, _strnextc, _wcsnextc Find next character in string  _mbsninc. _strninc, _wcsninc  Advance string pointer by n characters  _mbsspnp, _strspnp, _wcsspnp Return pointer to first character in given string that is not in another given string  _mbstrlen Get number of multibyte characters in multibyte-character string; locale-dependent  sprintf, _stprintf Write formatted data to a string  strcat, wcscat, _mbscat Append one string to another  strchr, wcschr, _mbschr Find first occurrence of specified character in string  strcmp, wcscmp, _mbscmp Compare two strings  strcoll, wcscoll, _stricoll, _wcsicoll, _strncoll, _wcsncoll, _strnicoll, _wcsnicoll Compare two strings using current locale code page information (_stricoll, _wcsicoll, _strnicoll, and _wcsnicoll are case-insensitive)  strcpy, wcscpy, _mbscpy Copy one string to another  strcspn, wcscspn, _mbscspn,  Find first occurrence of character from specified character set in string  _strdup, _wcsdup, _mbsdup Duplicate string  strerror Map error number to message string  _strerror Map user-defined error message to string  strftime, wcsftime Format date-and-time string  _stricmp, _wcsicmp, _mbsicmp Compare two strings without regard to case  strlen, wcslen, _mbslen, _mbstrlen Find length of string  _strlwr, _wcslwr, _mbslwr Convert string to lowercase  strncat, wcsncat, _mbsncat Append characters of string  strncmp, wcsncmp, _mbsncmp Compare characters of two strings  strncpy, wcsncpy, _mbsncpy Copy characters of one string to another  _strnicmp, _wcsnicmp, _mbsnicmp Compare characters of two strings without regard to case  _strnset, _wcsnset, _mbsnset Set first n characters of string to specified character  strpbrk, wcspbrk, _mbspbrk Find first occurrence of character from one string in another string  strrchr, wcsrchr,_mbsrchr Find last occurrence of given character in string  _strrev, _wcsrev,_mbsrev Reverse string  _strset, _wcsset, _mbsset Set all characters of string to specified character  strspn, wcsspn, _mbsspn Find first substring from one string in another string  strstr, wcsstr, _mbsstr Find first occurrence of specified string in another string  strtok, wcstok, _mbstok Find next token in string  _strupr, _wcsupr, _mbsupr Convert string to uppercase  strxfrm, wcsxfrm Transform string into collated form based on locale-specific information  vsprintf, _vstprint Write formatted output using a pointer to a list of arguments

user: user-2
content: wcscmp  http://en.cppreference.com/w/c/string/wide/wcscmp  另外可以使用_tcscmp，这样在unicode下等于wcscmp，多字节下等于strcmp

user: user-3
content: 标准 C 就是： #include <stdio.h> #include <stdlib.h> #include <string.h> #include <tchar.h> _tcscmp - strcmp (ANSI) / wcscmp (Unicode) 好处是跨平台。  Windows 平台 API 有很多： int lstrcmp(const TCHAR *lpStr1, const TCHAR *lpStr2); int lstrcmpi(const TCHAR *lpStr1, const TCHAR *lpStr2); int StrCmpC(const TCHAR *lpStr1, const TCHAR *lpStr2); int StrCmpN(const TCHAR *lpStr1, const TCHAR *lpStr2, int cch); int StrCmpNI(const TCHAR *lpStr1, const TCHAR *lpStr2, int cch); BOOL StrIsIntlEqual(BOOL bCaseSens, const TCHAR *lpStr1, const TCHAR *lpStr2, int cch); BOOL IntlStrEqWorker(BOOL bCaseSens, const TCHAR *lpStr1, const TCHAR *lpStr2, int cch);  每个都分为 A 和 W 版本。如： #include <windows.h> #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") const char str1[] = "ABC" const char str2[] = "abc" const WCHAR wstr1[] = L"ABC"; const WCHAR wstr2[] = L"abc" printf("%d\n", lstrcmpA(str1, str2)); printf("%d\n", lstrcmpW(wstr1, wstr2)); printf("%d\n", lstrcmpiA(str1, str2)); printf("%d\n", lstrcmpiW(wstr1, wstr2)); printf("%d\n", lstrcmpA(str1, str2)); printf("%d\n", lstrcmpW(wstr1, wstr2)); printf("%d\n", StrIsIntlEqualA(TRUE, str1, str2, 1024)); printf("%d\n", StrIsIntlEqualA(FALSE, str1, str2, 1024)); printf("%d\n", StrIsIntlEqualW(TRUE, wstr1, wstr2, 1024)); printf("%d\n", StrIsIntlEqualW(FALSE, wstr1, wstr2, 1024));

user: user-4
content: _tcscmp

user: user-5
content: wcscmp(_T(""),_T(""));