2010-06-09 118 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