我有一个WCHAR[]:
WCHAR foo[200];
我希望将值复制到它中:
if (condition)
{
foo = L"bar";
}
else
{
foo = L"odp";
}
什么是最好的方法来做这件事?
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");
我会使用 std::wstring
而不是 WCHAR
数组。
std::wstring foo;
...
if (condition)
{
foo = L"bar";
}
else
{
foo = L"odp";
}
另一种选择是使用来自C世界的一些肮脏的wstrcpy函数,如果您可以采用更清洁的C++方式,这是不合适或不安全的。
如果你是在谈论赋值,那么你现在的方式是完美的。如果你正在使用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);
foo
变量实际上是指向字符串第一个字符的指针。因此,将另一个字符串分配给它只会替换指针并泄漏内存。
最简单的方法是使用字符串类,例如std::wstring
,或使用一些旧的C函数,例如strncpy
。
使用srd::wstring
,代码如下:
std::wstring foo;
if(condition)
{
foo = L"bar";
}
else
{
foo = L"odp";
}
const WCHAR *foo;
if (condition)
{
foo = L"bar";
}
else
{
foo = L"odp";
}
如果不需要向foo附加任何数据,那么这是可以的。