C++:将L""字符串赋值给WCHAR[]?

5

我有一个WCHAR[]:

WCHAR foo[200];

我希望将值复制到它中:
if (condition)
{
    foo = L"bar";
}
else 
{
   foo = L"odp";
}

什么是最好的方法来做这件事?
5个回答

8

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

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

std::wstring foo;

...

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

另一种选择是使用来自C世界的一些肮脏的wstrcpy函数,如果您可以采用更清洁的C++方式,这是不合适或不安全的。


与更高评价的 https://dev59.com/hk7Sa4cB1Zd3GeqP2lav#3010190 相同的答案。 :( - imz -- Ivan Zakharyaschev

1

如果你是在谈论赋值,那么你现在的方式是完美的。如果你正在使用Visual C++并且想要复制w-strings,请考虑使用更安全的函数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";
}

与https://dev59.com/hk7Sa4cB1Zd3GeqP2lav#3010190相同的答案,该答案评分更高。 :( - imz -- Ivan Zakharyaschev

1
根据你需要做的具体事情,你可以改变 foo 的类型:
const WCHAR *foo;
if (condition)
{
    foo = L"bar";
}
else 
{
   foo = L"odp";
}

如果不需要向foo附加任何数据,那么这是可以的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接