我尝试过wcscat()但是我遇到了运行时访问冲突。
wchar_t* a = L"aaa";
wchar_t* b = L"bbb";
wchar_t* c;
c = wcscat(a, b);
有人可以告诉我这里有什么问题吗?或者另一种解决我问题的方法?感谢
答案 0 :(得分:6)
wcscat
不会创建新字符串 - 只需将b
附加到a
即可。因此,如果您想确保不会导致运行时访问冲突,则需要确保在b
末尾有a
的空间。在上面的例子中:
wchar_t a[7] = L"aaa";
wchar_t b[] = L"bbb";
wchar_t* c;
c = wcscat(a, b);
您仍然可以从函数中获取返回值,但它只会返回a
。
答案 1 :(得分:3)
使用c ++内置的wstring:
#include <string>
using std::wstring;
int main()
{
wstring a = L"aaa";
wstring b = L"bbb";
wstring c = a + b;
}
wcscat
用于c风格的字符串,而不是c ++样式字符串。这样做的方法是
wchar_t* a = L"aaa";
wchar_t* b = L"bbb";
wchar_t c[7];
wcscpy(c, a);
wcscat(c, b);
编辑:哇,现在我编辑了它,看起来我复制了下面的答案之一。
答案 2 :(得分:1)
wcscat
函数将第二个参数附加到第一个参数的字符串缓冲区中。看起来这可能是您在C中使用字符串的第一次体验。您可以通过执行以下操作来使您的示例工作:
wchar_t* a = L"aaa";
wchar_t* b = L"bbb";
wchar_t c[7];
wcscpy(c, a);
wcscat(c, b);
使用C字符串操作函数时,必须确保为字符串操作开始执行分配足够的缓冲区空间(C运行时不会为您执行此操作)。在这种情况下,这意味着c
缓冲区必须包含足够的空间来保存结果字符串。我已经预先计算出结果是6个字符长以及尾随空值,这意味着我需要分配7个字符。