C ++:将L“”字符串分配给WCHAR []?

时间:2010-06-09 21:39:28

标签: c++ string

我有一个WCHAR []:

WCHAR foo[200];

我想将值复制到其中:

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

这样做的最佳方式是什么?

5 个答案:

答案 0 :(得分: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 :(得分:1)

我会使用std::wstring而不是WCHAR数组。

std::wstring foo;

...

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

另一种方法是使用来自C世界的一些脏wstrcpy函数,如果你可以采用更干净的C ++方式,那么这些函数并不合适或安全。

答案 2 :(得分: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);

答案 3 :(得分:1)

foo变量实际上是指向字符串第一个字符的指针。因此,为它分配另一个字符串只会替换指针和泄漏内存。

最简单的方法是使用字符串类,如std::wstring,或使用一些旧的C函数,如strncpy

使用srd :: wstring它看起来像:

std::wstring foo;

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

答案 4 :(得分:1)

根据您需要做什么,您可以更改foo的类型:

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

如果不需要向foo追加任何数据,这很好。