代码之家  ›  专栏  ›  技术社区  ›  Cenoc

只接收参数的第一个字母

  •  6
  • Cenoc  · 技术社区  · 15 年前
    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 回复  |  直到 11 年前
        1
  •  8
  •   EFraim    15 年前

    它不是 char 它的 wchar_t 在编译时 UNICODE 集合。

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

    所以应该是int tmain(int argc,tchar**argv)

    转换为char很困难,并不总是正确的-win32提供的函数只能正确地转换当前的ansi代码页。

    如果要在应用程序内部使用UTF-8,那么必须在其他地方(例如 Boost )

        2
  •  2
  •   Community CDub    8 年前

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

    看到这个 question

        3
  •  0
  •   Philipp    15 年前

    不要使用 char 在Windows上的数据类型,它破坏了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());
    }