1. unicode编码
编码 | 尺寸 |
---|---|
utf-8 | 1 - 4字节 |
utf-16 | 2字节 |
utf-32 | 4字节 |
2. Windows函数版本(带字符串)
…A | ANSI编码,内部使用了…W的版本(会在内部进行转换) |
…W | UTF-16编码 |
… | 如果定义了UNICODE宏就是UTF-16编码 |
3. C语言中的字符编码:
char | ANSI编码 |
wchar_t | UTF-16编码 |
4. 计算字符串长度。
版本 | 说明 | |
---|---|---|
srclen | ANSI编码的字符串长度 | string.h |
wcslen | utf-16编码的字符串长度 | string.h |
_tcslen | wcslen(定义了_UNICODE宏) | |
srclen(没有定义_UNICODE宏) |
5. 字符串杂项
- 老的字符串函数没有检查长度不安全,建议用新的函数(…_s,在StrSafe.h中定义)代替。
- 安全字符串返回一个errno_t的错误类型(在errno.h中定义)。
- 字符串操作失败时,目标内存会在开头放’\0’,然后用0xfd填充后面的内容。
- 计算字符串:_countof
6. 注册自定义的错误处理:
- 自定义:void [函数名] (PCTSTR msg,
PCTSTR func,
PCTSTR file,
unsigned int line,
unsigned ptr) - 注册:_set_invalid_parameter_handler
- 隐藏默认错误窗口:_CrtSetReportMode(_CRT_ASSERT, 0)。
7. 剪切、复制、打印字符串
1.1 剪切字符串:HRESULT StringCchCat(PTSTR dest,
size_t destNum,
PCTSTR src)
1.2 剪切字符串:HRESULT StringCchCatEx(PTSTR dest,
size_t destNum,
PCTSTR src,
PTSTR* end,
size_t* remaining,
DWORD flags)
2.1 拷贝字符串:HRESULT StringCchCopy(PTSTR dest,
size_t destNum,
PCTSTR src)
2.2. HRESULT StringCchCopyEx(PTSTR dest,
size_t destNum,
PCTSTR src,
PTSTR* end,
size_t* remaining,
DWORD flags)
3.1 打印字符串:HRESULT StringCchPrintf(PTSTR dest,
size_t destNum,
PCTSTR format, …)
3.2 HRESULT StringCchPrintfEx(PTSTR dest,
size_t destNum,
PTSTR* end,
size_t* remaining,
DWORD flags,
PCTSTR src,
PCTSTR format, …)
参数 | 值 | 说明 |
---|---|---|
HERSULT | S_OK | 成功 |
STRSAFE_E_INVALID_PARAMETER | 失败,将NULL值传递给了参数 | |
STRSAFE_E_INSUFFICIENT_BUFFER | 失败,缓冲区太小 | |
remaining | 返回目标缓冲区还剩多少字符,不计’\0’,如果写NULL就不计算 | |
end | ||
flags | STRSAFE_FILL_BEHIND_NULL | |
STRSAFE_IGNORE_NULLS | 把NULL当做空字符串 | |
STRSAFE_FILL_ON_FAILURE | ||
STRSAFE_NULL_ON_FAILURE | ||
STRSAFE_NO_TRUNCATION |
8. 比较字符串:
-
按字符比较:int CompareString(LCID locale,
DWORD flags,
PCTSTR s1,
int cch1,
PCTSTR s2,
int cch2) -
按码位比较:int CompareStringOrdinal(PCWSTR s1,
int cchCount1,
PCWSTR s2,
int cchCount2,
BOOL ignoreCase)
locale | 区域设置ID | |
flags | NORM_IGNORECASE | 忽略大小写 |
LINGUISTIC_IGNORECASE | 忽略大小写 | |
NORM_IGNOREKANATYPE | 不区分平假名和片假名 | |
NORM_IGNORENONSPACE | 忽略non-spacing字符 | |
LINGUISTIC_IGNOREDIACRITIC | 忽略non-spacing字符 | |
NORM_IGNORESYMBOLS | 忽略符号 | |
NORM_IGNOREWIDTH | 不区分同一个字符的单字节和多字节 | |
SORT_STRINGSORT | 将标点符号当做符号处理 |