-1

我正在开发一个在 C++ 中使用 unordered_map 和 char* 的命令行程序。

但是,它不起作用。

这是我的代码。

#include "stdafx.h"
#include <unordered_map>

int main(int argc, char *argv[] )
{
  std::unordered_map <char*, char*> hash;

  for (int i = 1; i<argc; i++){
   if (argv[i][0] == '-'){
     hash[argv[i]] = argv[i+1];
   }
 }

 if (hash["-file"]){
   printf("Openning the file %s \n", hash["-file"]);
 }else{      
   printf("Error open files \n" );
   return 0;
 }

}

当我提供我的争论清单时:

myprogram.exe -file "c:\myfile.txt" -option1 .....

它无法打开输入文件。

有人可以帮我吗?

非常感谢

4

1 回答 1

1

正如@WhozCraig 在评论中所说,您需要在地图中使用std::string而不是char*作为键类型。您可以继续使用 char* 作为值类型,因为argv它具有整个程序的生命周期。

但是,如果您可以使用 Boost,他们的 Program Options 库比任何这些手写的东西都要好。不幸的是,由于您似乎使用的是 Windows,因此您的平台不提供任何内置的东西,如getopt_long().,但无论如何,Boost PO 是 C++ 中最好的工具。

于 2013-09-28T02:33:02.560 回答