2015-10-31 59 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]; 
}