C++ Main只接收参数的第一个字母

C++ Main只接收参数的第一个字母,c++,windows,unicode,C++,Windows,Unicode,似乎只有第一个字母的论点收到。。。我不明白为什么 int _tmain(int argc, char** argv) { FILE* file1=fopen(argv[1],"r"); FILE* file2=fopen(argv[2],"w"); } std::cout当您使用UNICODEset进行编译时,它不是char而是wchar\t 它被编译为wmain。链接器只是没有注意到有一个不同的签名,因为它是“export C”函数,并

似乎只有第一个字母的论点收到。。。我不明白为什么

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

std::cout当您使用
UNICODE
set进行编译时,它不是
char
而是
wchar\t

它被编译为
wmain
。链接器只是没有注意到有一个不同的签名,因为它是“export C”函数,并且它的名称不包含它的参数类型

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

转换为字符很棘手,而且并不总是正确的-Win32提供的函数只能正确转换当前的ANSI代码页


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

您的参数字符串是以UNICODE格式输入的


请参见此

不要在Windows上使用
char
数据类型,它会破坏Unicode支持。改用“宽”函数。在C++中,避免C的STDIO,使用文件流代替:

std::cout<<"Opening "<<strlen(argv[1])<<" and writing to "<<strlen(argv[2])<<std::endl;
#包括
#包括
#包括
内部wmain(内部argc,wchar\u t**argv){

如果(argc什么是
\u tmain
?你在什么环境下工作?看到这个问题的答案了吗?我不认为它是重复的。它的措辞不同,而且你不是我见过的第一个在这些症状上结巴的开发人员。所以这个公式至少应该保持不变。你知道如何转换成字符吗?@Cenoc:don根本无法转换为
char
#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());
}