C ++: назначить L "" строку в WCHAR []? - PullRequest
4 голосов
/ 10 июня 2010

У меня есть WCHAR []:

WCHAR foo[200];

Я хочу скопировать в него значения:

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

Какой лучший способ сделать это?

Ответы [ 5 ]

8 голосов
/ 10 июня 2010

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 голос
/ 10 июня 2010

В зависимости от того, что именно вам нужно сделать, вы можете изменить тип foo:

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

Это хорошо, если вам не нужно добавлять дополнительные данные в foo.

1 голос
/ 10 июня 2010

Переменная foo на самом деле является указателем на первый символ строки.Поэтому присвоение ему другой строки просто заменит указатель и утечку памяти.

Самый простой способ сделать это - использовать класс строки, например std::wstring, или использовать некоторые старые функции C, например strncpy.

При использовании srd :: wstring это будет выглядеть так:

std::wstring foo;

if(condition)
{
   foo = L"bar";
}
else
{
   foo = L"odp";
}
1 голос
/ 10 июня 2010

Если вы говорите о присвоении значения, то способ, которым вы делаете это, идеален.Если вы используете 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 голос
/ 10 июня 2010

Я бы использовал std::wstring вместо WCHAR массива.

std::wstring foo;

...

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

Альтернативой может быть использование некоторых грязных функций wstrcpy, происходящих из мира C, что не является оправданным или безопасным, если выможет пойти чище C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...