#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <boost/algorithm/string/classification.hpp> // Include boost::for is_any_of
#include <boost/algorithm/string/split.hpp> // Include for boost::split
using namespace std;
class CharStarWrapper
{
private:
typedef std::vector<char> CharArray;
typedef std::list<CharArray> StringList;
typedef std::vector<const char *> ArgList;
const char** m_Args;
StringList m_sList;
ArgList m_cStrings;
public:
CharStarWrapper(const std::string & input) : m_Args(nullptr)
{
std::vector<std::string> args;
boost::split(args, input, boost::is_any_of(" "), boost::token_compress_on);
for (auto const &v : args)
{
// create an array of char and place on list
m_sList.push_back(CharArray(v.begin(), v.end()));
// null terminate this entry
m_sList.back().push_back(0);
// add the pointer to this entry to the vector of const char *.
m_cStrings.push_back(&m_sList.back()[0]);
}
m_Args = m_cStrings.data();
}
const char** getArgs() { return m_Args; }
int getArgCount() const { return static_cast<int>(m_cStrings.size()); }
};
// Call this like main()
void fake_main(int argc, const char **argv)
{
std::cout << "The number of arguments is " << argc << "\n";
for (int i = 0; i < argc; ++i)
std::cout << argv[i] << "\n";
}
int main() {
string arg = "test ./MyDirectoryName/OPQ_Arksoatn.txt 1 SOMETHING 1 2 3 4 5 6 7";
CharStarWrapper wrapper(arg);
fake_main(wrapper.getArgCount(), wrapper.getArgs());
}