一 字符串长度
#ifdef __UNICODE
#define _tcslen wcslen
#else
#define _tcslen strlen
#endif
_tcslen(TEXT("hello"));
二 字符串复制,连接
_tcscpy_s
_tcscat_s
首先验证参数值,指针是否为空,整数是否在有效范围,枚举值是否有效,缓冲区是否足够,
任何一项失败返回errno_t值指出成功失败,可在输出窗口查看失败原因
TCHAR str[7]= TEXT("hello");
errno_t result = _tcscpy_s(str, _countof(str), TEXT("012345"));
_coutof(str)字符数,缓冲区大小的字符数时
sizeof(str)字节数 分配内存块时
三Windows字符串函数
头文件:#include<Shlwapi.h>
int WINAPI CompareStringW(
_In_ LCID Locale,
_In_ DWORD dwCmpFlags,
_In_NLS_string_(cchCount1) PCNZWCH lpString1,
_In_ int cchCount1,
_In_NLS_string_(cchCount2) PCNZWCH lpString2,
_In_ int cchCount2
);
参数详见:https://msdn.microsoft.com/en-us/library/windows/desktop/dd317759(v=vs.85).aspx
第二个参数
// String Flags.
//
#define NORM_IGNORECASE 0x00000001 // 忽略大小写
#define NORM_IGNORENONSPACE 0x00000002 // 忽略 nonspacing字符
#define NORM_IGNORESYMBOLS 0x00000004 // 忽略符号
#define LINGUISTIC_IGNOREDIACRITIC 0x00000020 // 忽略nonspacing字符
#define NORM_IGNOREWIDTH 0x00020000 // 不区分同一字符的单字节和双字节形式
#define NORM_LINGUISTIC_CASING 0x08000000 // 区分大小写?
INT ret=CompareString(GetThreadLocale(),NORM_IGNORECASE, TEXT("hello"),-1, TEXT("Hello"),-1); //返回2为相等
cout << ret<< endl;
字符串包括文件名、路径、XML元素/属性以及注册表项/值等。非常快,针对于需要在用户界面显示的字符串,需要考虑用户区域的设置则使用CompareString
int WINAPI CompareStringOrdinal(
_In_NLS_string_(cchCount1) LPCWCH lpString1,
_In_ int cchCount1,
_In_NLS_string_(cchCount2) LPCWCH lpString2,
_In_ int cchCount2,
_In_ BOOL bIgnoreCase
);
参数详见:https://msdn.microsoft.com/zh-cn/library/dd317762.aspx
int retcode = CompareStringOrdinal(TEXT("hello"), -1, TEXT("Hello"), -1, TRUE);
cout << retcode << endl;