windows核心编程:第2章Unicode字符大小的问题。
windows核心编程:第2章Unicode字符大小的问题。
Unicode字符长度的问题。这里我们先用一个例子
自定义错误处理函数
*/
#include<tchar.h>
#include<stdlib.h>
#include<Windows.h>
#include<stdint.h>
#include<crtdbg.h>//要用到_CrtSetReportMode函数
#include<strsafe.h>//放到最后一个
//自定义的函数调用失败的处理程序----只有放在Debug版本才有效,Release中所有的参数将被传入NULL或者0.
//当某个函数调用失败,系统会调用该函数,同时出入“错误描述文本”,出错的函数名称,文件名及出错所在行
void InvalidParameterHandl(PCTSTR expression, PCTSTR function, PCTSTR file, unsigned int line, uintptr_t)
{
_tprintf(_T("expression %s,\nfunction %s,\nfile %s,\nline %d\n"), expression, function, file, line);
}
int _tmain()
{
_CrtSetReportMode(_CRT_ASSERT, 0);//禁用“调试失败断言”对话框
TCHAR szBefore[5] = { _T('B'),_T('B'), _T('B'), _T('B'), '\0' };
TCHAR szBuffer[10]= { _T('-'),_T('-'), _T('-'), _T('-'),_T('-'),
_T('-'),_T('-'), _T('-'),'\0'};
TCHAR szAffer[5] = { _T('A'),_T('A'), _T('A'), _T('A'), '\0' };
//注册函数调用失败的处理程序
_set_invalid_parameter_handler(InvalidParameterHandl);
//源字符串10个字符(不含\0),目标缓冲区,只能容纳9个,会出错(发生错误时,不弹出Debug
//Assertion Failure对话框而是调用自定义的InvalidParameterHandle函数
errno_t ret = _tcscpy_s(szBuffer, _countof(szBuffer), _T("0123456789"));
system("pause");
return 0;
}
//自定义的函数调用失败的处理程序----只有放在Debug版本才有效,Release中所有的参数将被传入NULL或者0.
//当某个函数调用失败,系统会调用该函数,同时出入“错误描述文本”,出错的函数名称,文件名及出错所在行
源字符串10个字符(不含\0),目标缓冲区,只能容纳9个,会出错(发生错误时,不弹出Debug
//Assertion Failure对话框而是调用自定义的InvalidParameterHandle函数
这里看出来是缓冲区大小不够,我们改一下内容大小,这里改为
errno_t ret = _tcscpy_s(szBuffer, _countof(szBuffer), _T("012345678"));
不在报错。