wcscpy_s与wcsncpy

 

今天运行以下代码时一直出错

void Foo(const wchar_t* lpch, int len)
{
...
wchar_t *str = new wchar_t[len+1];
wcscpy_s(str, len, lpch);
str[len] = '\0';
...
}

Foo传入的是字符串的指针和其字符个数。按理说str已经分配了足够的内存空间了,但拷贝时还会出错,造成程序终止。

最后发现,误解了wcscpy_s的使用方法了,原来wcscpy_s的第二个参数指定了目标处地址所能拷贝的最大容量(包括了null字符),当从源字符串复制到目标字符串的字符个数(包括null)超过了第二个参数指定的值时,该函数将会执行不成功,具体表现见https://msdn.microsoft.com/en-us/library/td1esda9.aspx

按照我本意,我应该使用wcsncpy的。 wchar_t *wcsncpy( wchar_t *strDest, const wchar_t *strSource, size_t count ); 

posted @ 2016-05-28 14:55  sfqtsh  阅读(2312)  评论(0编辑  收藏  举报