fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <list>
  5. #include <boost/algorithm/string/classification.hpp> // Include boost::for is_any_of
  6. #include <boost/algorithm/string/split.hpp> // Include for boost::split
  7.  
  8. using namespace std;
  9.  
  10. class CharStarWrapper
  11. {
  12. private:
  13. typedef std::vector<char> CharArray;
  14. typedef std::list<CharArray> StringList;
  15. typedef std::vector<const char *> ArgList;
  16.  
  17. const char** m_Args;
  18. StringList m_sList;
  19. ArgList m_cStrings;
  20.  
  21. public:
  22. CharStarWrapper(const std::string & input) : m_Args(nullptr)
  23. {
  24. std::vector<std::string> args;
  25. boost::split(args, input, boost::is_any_of(" "), boost::token_compress_on);
  26. for (auto const &v : args)
  27. {
  28. // create an array of char and place on list
  29. m_sList.push_back(CharArray(v.begin(), v.end()));
  30.  
  31. // null terminate this entry
  32. m_sList.back().push_back(0);
  33.  
  34. // add the pointer to this entry to the vector of const char *.
  35. m_cStrings.push_back(&m_sList.back()[0]);
  36. }
  37. m_Args = m_cStrings.data();
  38. }
  39.  
  40. const char** getArgs() { return m_Args; }
  41. int getArgCount() const { return static_cast<int>(m_cStrings.size()); }
  42. };
  43.  
  44. // Call this like main()
  45. void fake_main(int argc, const char **argv)
  46. {
  47. std::cout << "The number of arguments is " << argc << "\n";
  48. for (int i = 0; i < argc; ++i)
  49. std::cout << argv[i] << "\n";
  50. }
  51.  
  52. int main() {
  53. string arg = "test ./MyDirectoryName/OPQ_Arksoatn.txt 1 SOMETHING 1 2 3 4 5 6 7";
  54. CharStarWrapper wrapper(arg);
  55. fake_main(wrapper.getArgCount(), wrapper.getArgs());
  56. }
  57.  
Success #stdin #stdout 0s 16080KB
stdin
Standard input is empty
stdout
The number of arguments is 11
test
./MyDirectoryName/OPQ_Arksoatn.txt
1
SOMETHING
1
2
3
4
5
6
7