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

标签 c++ wstring wchar fedora12

我从服务器得到一个类似这样的字符串:"aña!a¡a¿a?a",所以我对其进行解码,然后将其传递给一个函数。

我需要对消息做的事情是根据字母加载路径。

我的函数的 header 是:void SetInfo(int num, char *descr[4]) 因此它接收一个数字和一个包含 4 个字符(句子)的数组。为了方便起见,假设我只需要使用 descr[0]。

当我调试并到达 SetInfo() 时,我在调试 View 中得到了准确的消息:"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ᡰ9 740슃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/

相关文章:

c++ - Symbian:如何将 HBufC* 写入文件

C++如何在给定位置将wstring插入 vector

c++ - 调用 "SetDllDirectory"时表达式: string iterators incompatiable,

c++ - 为什么下面的 C++ 代码只打印第一个字符?

c++ - 将函数传递给新线程时编译器错误?

c++ - 如何获得重定向路径的实际路径?

C++ wstringstream << NULL

c - wchar_t sprintf 的问题

c++ - C++ 数组中的多字节 UTF-8

c++ - 处理组合关系中的变量