我有一个WCHAR []:
WCHAR foo[200];
我想将值复制到其中:
if (condition)
{
foo = L"bar";
}
else
{
foo = L"odp";
}
这样做的最佳方式是什么?
答案 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追加任何数据,这很好。