У меня есть массив WCHAR [] s. Как я могу присоединиться к ним?
Я знаю длину массива.
[L"foo", L"bar"] => "foo, bar"
Переберите эти строки и добавьте их в std::wstring
:
std::wstring all;
wchar_t *data[] = { L"foo", ... };
size_t data_count = sizeof(data) / sizeof(*data);
for (size_t n = 0; n < data_count; ++n)
{
if (n != 0)
all += L", ";
all += data[n];
}
Слегка улучшенная версия решения R Samuel Klatchko.
wchar_t *data[] = { L"foo", ... };
size_t data_count = sizeof(data) / sizeof(*data);
wchar_t result[STUFF];
wcscpy(result, data[0]);
for (std::size_t n = 1; n < data_count; ++n)
{
wcscat(result, L", ");
wcscat(result, data[n]);
}
Улучшение заключается в том, что в цикле нет зависимости от ветви if. Я перешел на функции wcsXXXX стандартной библиотеки C, но я бы использовал std::wstring
, если он доступен.
EDIT:
Предполагая
что я знаю длину массива.
означает "я знаю количество строк, которые я хочу соединить", то вы не можете использовать то, что я написал выше, что требует, чтобы вы знали конечную длину строки назначения во время компиляции.
Если вы не знаете во время компиляции, используйте этот вариант, который работает иначе (и содержит улучшение цикла, о котором я говорил):
wchar_t *data[] = { L"foo", ... };
size_t data_count = sizeof(data) / sizeof(*data);
std::wstring result(data[0]); //Assumes you're joining at least one string.
for (std::size_t n = 1; n < data_count; ++n)
result.append(L", ").append(data[n]);
Есть ли в вашей системе wsprintf ()
? Пример:
wchar_t *a = { L"foo", L"bar" };
wchar_t joined[1000];
wsprintf(joined, "%S, %S", a[0], a[1])