2个WCHAR赋值时的问题

在尝试截取WCHAR字符串时遇到问题,函数`SubString`中使用`new CHAR`分配内存,期望分配7个字节,但实际上分配了14字节。在调用`wcscpy_s`时出错,`pBuf`内容出现额外的未知字符。问题可能在于对WCHAR类型的字节数理解不准确。解决方案需调整内存分配以适应WCHAR的双字节特性。
摘要由CSDN通过智能技术生成
写了个函数,用于截取位置X到位置Y长度的字符串 代码如下

第一个函数是输入函数,第二个函数表示X的位置,第三个函数表示Y的位置,第四个函数是输出函数,即截获的字符串

UINT CTimerDlg::SubString(LPCWSTR pStr, UINT uBegin, UINT uEnd, WCHAR *pOutStr)
{
if (uBegin > uEnd)
return SSERR_BGTE;
if (pStr == NULL || uBegin == 0 || uEnd == 0)
return SSERR_INNULL;
LPWSTR pBuf = new CHAR[uEnd-uBegin+2]; 加2是因为本身uEnd-uBegin少1位,需要加1,另外加1是能让字符串有空结束符
UINT n = 0;
UINT i = 0;
for (i = uBegin; i < uEnd; i++)
{
pBuf[n] = pStr[i];
n++;
};
int ilen = wcslen(pBuf);
wcscpy_s(pOutStr, (uEnd-uBegin+2), pBuf);
return SSERR_OK;
}

问题就在LPWSTR pBuf = new CHAR[uEnd-uBegin+2]这行代码上 比方说我要截取的开始位置是第3位,结束位置为第8位,那我这里给pBuf分配了[8-3+2]为7位,但是调试运行时,系统自动为我分配了14位,我知道WCHAR 占2个字节 14位没错。但运行到wcscpy_s(pOutStr, (uEnd-uBegin+2), pBuf);这里就出错了,我在调试窗口可以看到pBuf的内容为"123456???????"(后面很多个“?”) 明显多了“?”的字节数。请问改怎么解决?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值