wcstombs的使用

Converts a sequence of wide characters to a corresponding sequence of multibyte characters.

size_t wcstombs(
   char *mbstr,
   const wchar_t *wcstr,
   size_t count 
);
Parameters
mbstr
The address of a sequence of multibyte characters.
wcstr
The address of a sequence of wide characters.
count

          The maximum number of bytes that can be stored in the multibyte output string.

他的使用很简单。但是在第三个参数的使用的时候经常会出错。

coverity会报告一个潜在的越界错误。

std::string fullpathFilename;
    const unsigned int nMaxPathLen = 255;
	wchar_t szPath[nMaxPathLen + 1] = {0};
    GetModuleFileName(NULL, szPath, nMaxPathLen);

    wchar_t   *p = wcsrchr(szPath, '\\');
    *p = 0;

	unsigned int _Dsize = (nMaxPathLen + 1) * 2; //错误
	char *_Dest = new char[_Dsize];    
	memset(_Dest,0,_Dsize);
    wcstombs(_Dest,szPath,_Dsize);

    fullpathFilename.append(_Dest);
    fullpathFilename.append("\\MemoryDRLocation");

	delete[] _Dest;
    _Dest = NULL;
这里的错误就是误认为该函数第三个参数需要数组的字节长度了。其实他是需要的数组的元素个数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值