更改wchar_t * []中的值

时间:2015-10-31 18:43:16

标签: c++ char wchar-t

我有这段代码:

char *charTable[] = { "test1", "test2", "test3" };
size_t originSize[] = { 6, 6, 6 };
wchar_t* textValues[3];
const size_t newsize = 100;

for (int i = 0; i < 3; i++) {
    wchar_t wcstring[newsize];
    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wcstring, originSize[i], charTable[i], _TRUNCATE);
    wcscat_s(wcstring, L"");
    textValues[i] = wcstring;
}

我希望将"test1""test2""test3"放在textValues wchar_t*中,但在循环textValues包含{{1}之后},"test3""test3"

1 个答案:

答案 0 :(得分:0)

首先,您需要将目标指针初始化为某些内容:

textValues[i] = new wchar_t[newsize];

然后,使用textValues[i] = wcstring;

,而不是分配wcscpy(制作浅层副本)
wcscpy(textValues[i], wcstring);

或者使用更安全的wcscpy_s

wcscpy_s(textValues[i], newsize, wcstring);

最后,记住delete新分配的内存,当你完成它时:

delete [] textValues[i];

完整样本:

char *charTable[] = { "test1", "test2", "test3" };
size_t originSize[] = { 6, 6, 6 };
wchar_t* textValues[3];
const size_t newsize = 100;

for (int i = 0; i < 3; i++) {
    wchar_t wcstring[newsize];
    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wcstring, originSize[i], charTable[i], _TRUNCATE);
    wcscat_s(wcstring, L"");
    textValues[i] = new wchar_t[newsize];
    wcscpy_s(textValues[i], newsize, wcstring);
}

//later
for (int i = 0; i < 3; i++) {
    delete [] textValues[i];
}