Преобразование из char * в wchar * не работает должным образом

Я получаю строку как: "aña!a¡a¿a?a" с сервера, поэтому я декодирую его, а затем передаю в функцию.

Что мне нужно сделать с сообщением, это что-то вроде загрузки путей в зависимости от букв.

Заголовок моей функции: void SetInfo(int num, char *descr[4]) поэтому он получает одно число и массив из 4 символов (предложений). Для упрощения, скажем, мне нужно работать только с descr [0].

Когда я отлаживаю и прибываю туда в SetInfo (), я получаю точное сообщение в представлении отладки: "aña!a¡a¿a?a" так что пока тут все ок.
Первоначально информация, которую я получал об этой функции, была std :: wstring, поэтому весь мой код, работающий с этим сообщением, был с wstrings и strings, но теперь я получаю символ, как показано в заголовке. Сообщение пришло, пока здесь, хорошо, но если я хочу работать с ним, то я не могу, потому что, если я отлаживаю и вижу каждую позицию Descr [0], тогда я получаю

 descr[0][0] = 'a'; //ok
descr[0][1] = 'Ã '; // BAD

поэтому я попытался преобразовать char * в wchar * с помощью кода, найденного здесь:

 size_t size = strlen(descr[0]) + 1;
wchar_t* wa = new wchar_t[size];
mbstowcs(wa,descr[0],size);

Но тогда отладчик показывает мне, что wa имеет:

wa wchar_t * 0x185d4be8 L"a-\uffffffff刯2e2e牵6365⽳6f73歯6f4c楲6553䈯736f獵6e6f档6946琯7361灭6569湰2e6f琀0067\021ᡰ9740슃b8\020\210=r"

что я полагаю, что это неправильно (я полагаю, что я должен увидеть то же самое начальное сообщение "aña!a¡a¿a?a", Если это сообщение в порядке, то я не знаю, как получить то, что мне нужно …)

Итак, мой вопрос: как я могу получить, что descr [0] [0] = ‘a’ и descr [0] [1] = ‘ñ’ ?? Я не могу передать char в wchar (вы уже видите, что я получил). Я делаю это неправильно? Или есть другой способ? Я действительно застрял на этом, поэтому любая идея будет очень ценится.

Раньше, когда я работал с wstrings (и он работал так хорошо), я делал что-то вроде этого:

if (word[i]==L'\x00D1' or word[i]==L'\x00F1')  // ñ or Ñ
path ="PathOfÑ";

где слово [i] совпадает с descr [0] [1] в этом случае, но с wstrings. Поэтому я знал, что это слово [i] было буквой «ñ». Может быть, это помогает понять, что я делаю

(кстати … я работаю над затмением, над Linux.)

0

Решение

mbstowcs функция работает со строками в стиле C, и одна из особенностей строк в стиле C состоит в том, что они имеют специальный завершающий символ, '\0', Вы, кажется, не добавляете этот терминатор в строку, ведущую mbstowcs выйти за пределы фактической строки и дать вам неопределенное поведение.

1

Другие решения


По вопросам рекламы [email protected]