我从服务器获得了一个类似"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和字符串,但现在我收到的是一个char,如标题中所示。消息到此为止,但是如果我想使用它,那么我不能,因为如果我调试并查看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]是字母'ñ'。也许这有助于理解我在做什么
(顺便说一句......我正在研究eclipse,在Linux上。)
答案 0 :(得分:1)
mbstowcs
函数适用于C风格的字符串,其中一个关于C风格字符串的事情是它们有一个特殊的终止字符'\0'
。您似乎没有将此终结符添加到字符串中,导致mbstowcs
超出实际字符串的范围并为您提供未定义的行为。