Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) CreateArgv

 

Technical facts

 

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: ./CppCreateArgv/CppCreateArgv.pro

 

include(../../ConsoleApplication.pri) #Or use the code below
# QT += core
# QT += gui
# greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# CONFIG   += console
# CONFIG   -= app_bundle
# TEMPLATE = app
# CONFIG(release, debug|release) {
#   DEFINES += NDEBUG NTRACE_BILDERBIKKEL
# }
# QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Weffc++
# unix {
#   QMAKE_CXXFLAGS += -Werror
# }

include(../../Libraries/Boost.pri) #Or use the code below
# win32 {
#   INCLUDEPATH += \
#     ../../Libraries/boost_1_55_0
# }

SOURCES += main.cpp

 

 

 

 

 

./CppCreateArgv/main.cpp

 

#include <cstring>
#include <iostream>
#include <string>
#include <vector>

//Function with the same signature as main
int fake_main(int argc, char * argv[])
{
  for (int i=0; i!=argc; ++i)
  {
    std::cout << i << ": " << argv[i] << std::endl;
  }
  return 0;
}

std::pair<int,char **> CreateArgv(const std::vector<std::string>& v)
{
  typedef char* String;
  typedef String* Strings;
  const int argc = static_cast<int>(v.size());
  Strings argv = new String[argc];
  for (int i=0; i!=argc; ++i)
  {
    argv[i] = new char[v[i].size() + 1];
    std::strcpy(argv[i],&v[i][0]);
  }
  std::pair<int,char **> p = std::make_pair(argc,argv);
  return p;
}

void DeleteArgv(const std::pair<int,char **>& p)
{
  const int argc = p.first;
  for(int i = 0; i != argc; ++i)
  {
    delete[] p.second[i];
  }
  delete[] p.second;
}


int main()
{
  const std::vector<std::string> v {
    "MyMain.exe",
    "--argument_1",
    "--argument_2",
    "--argument_3",
    "--argument_4",
    "--argument_5",
    "--argument_6",
    "--argument_7"
  };
  const auto p(CreateArgv(v));
  fake_main(p.first,p.second);
  DeleteArgv(p);
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict

This page has been created by the tool CodeToHtml