从char *到wchar *的转换无法正常工作

时间:2015-09-14 15:05:02

标签: c++ wstring wchar fedora12

我从服务器获得了一个类似"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上。)

1 个答案:

答案 0 :(得分:1)

mbstowcs函数适用于C风格的字符串,其中一个关于C风格字符串的事情是它们有一个特殊的终止字符'\0'。您似乎没有将此终结符添加到字符串中,导致mbstowcs超出实际字符串的范围并为您提供未定义的行为