【发布时间】:2019-06-14 09:38:12
【问题描述】:
我有一个有趣的问题,我不知道为什么。
inline void mergeWChar(wchar_t*& dest, const wchar_t* source) {
if (dest == nullptr) {
dest = const_cast<wchar_t*>(source);
return;
}
int size = wcslen(dest);
wcscat_s(dest, size, source);
}
inline void test() {
wchar_t* msg = nullptr;
wchar_t* t = L"BLA.BLA.BLA";
mergeWChar(msg, L"Ts is jut a phrase in order to test my function");
mergeWChar(msg, t);
}
我正在尝试使用 wcscat_s 函数创建一个将合并更严格的 2 wchar_t* 的函数,但由于某种原因无法正常工作,并且我收到了此错误消息。
在 ConsoleApplication1.exe 中的 0x5D8C3A18 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突写入位置 0x0082DD60。
另外,我已经检查了这两个问题,并没有真正帮助我。
wcscat_s function - buffer error
我不能做什么
我正在使用一些遗留代码,我可以不使用以下代码:
- 字符串
- to_wstring
- wchar_t var[size]
【问题讨论】:
-
wchar_t* t = L"BLA.BLA.BLA";在我这边无法编译。 “无法从 'const wchar_t [12]' 转换为 'wchar_t *'” -
这很糟糕,
dest = const_cast<wchar_t*>(source);。你承诺你不会修改source,但是你给了调用者一个指向它的非常量指针。谁或什么应该为级联输出分配内存?
标签: c++ visual-c++