需要帮助将一个wchar_t附加到另一个! C ++

时间:2009-05-08 23:41:23

标签: c++

我尝试过wcscat()但是我遇到了运行时访问冲突。

wchar_t* a = L"aaa";
wchar_t* b = L"bbb";
wchar_t* c;
c = wcscat(a, b);

有人可以告诉我这里有什么问题吗?或者另一种解决我问题的方法?感谢

3 个答案:

答案 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个字符。