主要只收到第一个参数字母

时间:2010-07-09 18:05:05

标签: c++ windows unicode

int _tmain(int argc, char** argv)  
    {  
      FILE* file1=fopen(argv[1],"r");  
      FILE* file2=fopen(argv[2],"w");  
    }

好像只收到了论据的第一个字母......我不明白为什么!

std::cout<<"Opening "<<strlen(argv[1])<<" and writing to "<<strlen(argv[2])<<std::endl;

无论如何输出1和1。 (在MSVC 2010中)

3 个答案:

答案 0 :(得分:8)

使用char集进行编译时,wchar_t不是UNICODE

编译为wmain。链接器只是没有注意到有不同的签名,因为它是“导出C”函数,它的名称不包含其参数类型。

所以它应该是int _tmain(int argc,TCHAR ** argv)

转换为char很棘手,并不总是正确的 - Win32提供的函数只会正确翻译当前的ANSI代码页。

如果您想在应用程序内部使用UTF-8,那么您必须在其他地方寻找转换器(例如在Boost中)

答案 1 :(得分:2)

您的参数字符串以UNICODE形式出现。

请参阅此question

答案 2 :(得分:0)

不要在Windows上使用char数据类型,它会破坏Unicode支持。请改用“宽”功能。在C ++中,避免使用C的stdio,而是使用文件流:

#include <cstdlib>
#include <string>
#include <fstream>
int wmain(int argc, wchar_t** argv) {
  if (argc <= 2) return EXIT_FAILURE;
  const std::wstring arg1 = argv[1];
  const std::wstring arg2 = argv[2];
  std::ifstream file1(arg1.c_str());
  std::ofstream file2(arg2.c_str());
}