读书人

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

发布时间: 2012-04-13 13:50:24 作者: rapoo

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

代码如下:

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的第二个参数应该传递什么?

读书人网 >C++

热点推荐