Я получаю строку как: "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.)
mbstowcs
функция работает со строками в стиле C, и одна из особенностей строк в стиле C состоит в том, что они имеют специальный завершающий символ, '\0'
, Вы, кажется, не добавляете этот терминатор в строку, ведущую mbstowcs
выйти за пределы фактической строки и дать вам неопределенное поведение.