pastebin

Paste Search Dynamic
Recent pastes
problem1
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. extern "C" int execv(const char *pathname, char *const argv[]);
  6.  
  7. // we want to start program using execv() call
  8. // with a list of generated arguments, but something went wrong:
  9. // execv() receives some of arguments that are not the same that we've prepared
  10. void problem1(const std::string &exe, int nargs) {
  11.   std::vector<std::string> args;
  12.   std::vector<char *> argv;
  13.   for (auto i = 0; i < nargs; ++i) {
  14.     args.push_back("Value_" + std::to_string(i + 1));
  15.     argv.push_back((char *)(args[i].c_str()));
  16.     std::cout << i << ": " << args[i] << " " << argv[i] << std::endl;
  17.   }
  18.   argv.push_back(nullptr); // store end of list marker
  19.   execv(exe.c_str(), argv.data());
  20. }
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23.  
  24. int main(int argc, char *argv[]) {
  25.   problem1(argv[0], 5);
  26.   return 0;
  27. }
  28.  
  29. extern "C" {
  30. // stub for system's execv function
  31. int execv(const char *pathname, char *const argv[]) {
  32.   std::cout << "pathname = {" << pathname << "}" << std::endl;
  33.   for (auto i = 0; argv[i] != nullptr; ++i) {
  34.     std::cout << "argv[" << i << "] = {" << argv[i] << "}" << std::endl;
  35.   }
  36.   return 0;
  37. }
  38. }
  39.  
Parsed in 0.022 seconds