windows核心编程:第2章Unicode字符大小的问题。

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"));

不在报错。
在这里插入图片描述

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值