Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将char/*转换为wchar\u t/*---但是_C++ - Fatal编程技术网

C++ 如何将char/*转换为wchar\u t/*---但是

C++ 如何将char/*转换为wchar\u t/*---但是,c++,C++,我正在将一个(相当)旧的C代码转换成VS2010。当我使用多字节选项编译程序时,一切都很好,但我必须将其转换为UNICODE 我收到了很多与字符串对话相关的错误消息(但这并不奇怪)。 我的问题是,我必须使用wchar字符串(因为UNICODE),但我还必须保留标准的字符值(程序需要使用标准ascii代码将数据写入文件) 更清楚地说,使用Windows需要UNICODE,但文件必须保存为ascii格式。我在很多地方收到错误,这就是为什么我决定把这个问题放在这里 somoene可以建议解决这类问题的

我正在将一个(相当)旧的C代码转换成VS2010。当我使用多字节选项编译程序时,一切都很好,但我必须将其转换为UNICODE

我收到了很多与字符串对话相关的错误消息(但这并不奇怪)。 我的问题是,我必须使用wchar字符串(因为UNICODE),但我还必须保留标准的字符值(程序需要使用标准ascii代码将数据写入文件)

更清楚地说,使用Windows需要UNICODE,但文件必须保存为ascii格式。我在很多地方收到错误,这就是为什么我决定把这个问题放在这里

somoene可以建议解决这类问题的最佳做法吗

提前谢谢你

编辑:

我不是C/C++方面的专家,这是我的第一个大型项目。我试过你的建议,第一个答案是:}

    { 
TCHAR* strz1=_T("%u blocks converted.");
      if (n>0) 
      {
      sprintf(str,strz1,n)
      }
      else
      TCHAR* strz2=_T("No blocks found!"); 
      sprintf(str,strz2);
      TCHAR* strz3=_T("Status");
      MessageBoxW(hwnd,str,strz3,MB_OK|MB_ICONINFORMATION);
      return(fe);
    }
我犯了一些著名的错误:

错误C2664:“sprintf”:无法将参数2从“TCHAR*”转换为“const char*”


错误C2664:“MessageBoxW”:无法将参数2从“char[32]”转换为“LPCWSTR”

如果您使用的是MFC,请检查以下转换宏以获取CString:


这样,您就可以使用UTF-8导出文件,并将它们从UTF-8读回UTF-16,这是存储wchar_的自然方式。这样,您的应用程序就可以使用UNICODE并仍然以ASCII格式导出(UTF-8与ASCII向后兼容)。

解决方案的最佳实践(“我有错误。我不会告诉您错误是什么”)就是解决问题。我不会告诉您如何使用。使用
UNICODE
,但在
MessageBoxA
中调用需要使用ASCII的函数,而不是
MessageBoxW
MessageBox
。用于转换字符串。不过,我不确定这些都没有例子。所以你的问题是如何在ASCII和Unicode之间转换?你试过谷歌搜索吗?有几件事:首先,你的
else
应该立即跟随你的
if
(你可能需要大括号)。其次,您应该使用
\u vsprintf
或与
TCHAR
一起使用的任何名称。第三,为了显式使用
MessageBoxW
,您应该使用类似
MultiByteToWideChar
的东西将参数转换为宽字符串。。我知道如果/否则,这不是问题。但是,你能告诉我用什么命令代替sprintf吗?