2015-10-31 22 views
0

我有这样的代码:变化值* []

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"在​​作为wchar_t*,但环后​​包含"test3""test3""test3"

+3

'wcstring'超出范围的循环之后,也就是说'textValues [I]'是一个悬挂指针(意思是指向无效)。 – Cornstalks

回答

0

首先,你需要把目标指针初始化的东西:

textValues[i] = new wchar_t[newsize]; 

然后,而不是分配textValues[i] = wcstring;(这使得浅拷贝),使用wcscpy

wcscpy(textValues[i], wcstring); 

或者使用更安全wcscpy_s

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

最后,记住R键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]; 
}