从char*到wchar*的转换不能正常工作

Conversion from char * to wchar* does not work properly

本文关键字:常工作 工作 转换 char wchar 不能      更新时间:2023-10-16

我从服务器得到一个字符串,如:"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,所以我处理该消息的所有代码都是与wstring和字符串一起工作的,但现在我收到的是一个字符,如头中所示。消息到达直到这里好,但如果我想用它工作,那么我不能,因为如果我调试并看到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琀006721ᡰ9740슃b820210=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]在这种情况下相同,但使用wstring。因此,我知道这个单词[i]是字母'ñ'。也许这有助于理解我在做什么

(顺便说一句…我正在linux上开发eclipse。)

mbstowcs函数作用于c风格字符串,c风格字符串的一个特点是它们有一个特殊的终止字符''。您似乎没有将此终止符添加到字符串中,导致mbstowcs超出实际字符串的界限并给您未定义行为