2010-06-09 117 views

回答

1

取決於你需要做什麼,你可以改變foo的類型:

const WCHAR *foo; 
if (condition) 
{ 
    foo = L"bar"; 
} 
else 
{ 
    foo = L"odp"; 
} 

這是好的,如果唐不需要向foo添加更多數據。

1

我會使用std::wstring而不是WCHAR陣列。

std::wstring foo; 

... 

if (condition) 
{ 
    foo = L"bar"; 
} 
else 
{ 
    foo = L"odp"; 
} 

另一種方法是使用從C世界未來有些髒wstrcpy功能,什麼是不approriate還是安全的,如果你可以去清潔C++的方式。

+0

相同的答案http://stackoverflow.com/a/3010190/94687,這是更好的評價。 :( – 2015-02-17 11:08:48

7

wcscpy,雖然最好的事情是使用std::wstring來代替。

std::wstring foo; 
if (condition) 
    foo = L"bar"; 
else 
    foo = L"odp"; 

或者,如果你堅持要用wcscpy

WCHAR foo[200]; 
if (condition) 
    wcscpy(foo, L"bar"); 
else 
    wcscpy(foo, L"odp"); 
1

如果你是在談論分配一個值,你正在做的方式是完美的。如果您使用的是Visual C++並且想要複製W字符串,請考慮使用更安全的功能wcscpy_s(它比wcscpy更安全)。

errno_t wcscpy_s(
    wchar_t *strDestination, 
    size_t numberOfElements, 
    const wchar_t *strSource 
); 

我給你一個簡單的例子:

wchar* wstrOther = "hello"; 
wcscpy_s(foo, 200, wstrOther); 
1

foo變量實際上是一個指向字符串的第一個字符。因此將另一個字符串分配給它只會替換指針和泄漏內存。

最簡單的方法是使用字符串類,如std::wstring,或使用一些舊的C函數,如strncpy

使用SRD :: wstring的它看起來像:

std::wstring foo; 

if(condition) 
{ 
    foo = L"bar"; 
} 
else 
{ 
    foo = L"odp"; 
} 
+0

相同的答案http://stackoverflow.com/a/3010190/94687,這是更好的評價。:( – 2015-02-17 11:09:22