首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这次一定要把这个有关问题搞懂

2012-04-13 
这次一定要把这个问题搞懂如下代码,运行时为什么会出错,说是某个断言失败,而且这个错误我理解不了。代码如

这次一定要把这个问题搞懂
如下代码,运行时为什么会出错,说是某个断言失败,而且这个错误我理解不了。

代码如下:

C/C++ code
    CString a("world");    TCHAR b[50] = L"hello";    wcscat_s(b, a.GetLength(), a.GetBuffer());


错误如下:
Expression:(L"String is not null terminated" && 0)




[解决办法]
看看是否定义了_UNICODE宏?
"world"也改为L"world"试试
[解决办法]
代码里,有的是宽字符版本的(如,wcscat_s和L),而有的是根据设置对应宽窄字符(CString,TCHAR)。
建议你用同一套版本。

对第二个参数的名字是sizeInWords,但实际上还是要传多少bytes,记得加上最后\0的空间。
wcscat_s(b, sizeof(wchar_t)*(a.GetLength()+1), a.GetBuffer());
[解决办法]
这是MSDN上的解释:注意看黑体字

Parameters 
strDestination
Null-terminated destination string buffer.

numberOfElements
Size of the destination string buffer.

strSource
Null-terminated source string buffer.

[解决办法]
第二个参数应该是目的字符串的缓冲区的长度。
所以必须要>原字符长长度和新加入字符串长度。
改成
CString a("world");
TCHAR b[50] = L"hello";

wcscat_s(b, 50,a.GetBuffer());




[解决办法]
没看懂,你们在讨论什么?

wcscat_s的第二个参数应该传递什么?

热点排行