从char*到wchar*的转换不能正常工作
Conversion from char * to wchar* does not work properly
我从服务器得到一个字符串,如:"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琀0067 21ᡰ9740슃b8 20210=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
超出实际字符串的界限并给您未定义行为。
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程