我从服务器收到一个字符串:"aña!a¡a¿a?a"
,所以我将其解码,然后将其传递给函数。
我需要对消息执行的操作类似于加载依赖于字母的路径。
我函数的标头是:void SetInfo(int num, char *descr[4])
,因此它接收一个数字和4个字符(句子)的数组。为了简化操作,假设我只需要使用descr [0]。
当我调试并到达SetInfo()时,我在debugg视图中得到了准确的消息:"aña!a¡a¿a?a"
,直到一切正常为止。
最初,我在该函数上收到的信息是std :: wstring,所以我处理该消息的所有代码都是wstrings和string,但是现在我收到的是字符,如标题所示。消息到达这里直到可以,但是如果我想使用它,那我就不能这样做,因为如果我调试并查看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Ñ";
其中word [i]在这种情况下与descr [0] [1]相同,但带有wstrings。因此,我知道这个词[i]是字母“ñ”。也许这有助于了解我在做什么
(顺便说一句...我正在Linux上进行Eclipse。)
最佳答案
mbstowcs
函数适用于C风格的字符串,关于C风格的字符串的事情之一是它们具有特殊的终止字符'\0'
。您似乎并没有在字符串中添加此终结符,从而导致mbstowcs
超出了实际字符串的范围,并给了您未定义的行为。
关于c++ - 从char *到wchar *的转换无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32568110/