获取 execvp() Linux c++ 的用户输入 using std::vecor<char*>

Getting user input for execvp() Linux c++ using std::vecor<char*>

本文关键字:vecor gt lt std char using execvp Linux c++ 输入 用户      更新时间:2023-10-16

所以我有一个半工作程序,我使用

getline(std::cin, userinput, 'n')

然后,我将输入发送到 std::vector<std::string> subStrs 分解来自用户的输入,以便每个命令元素都是独立的

然后将它们全部推到 std::vector<char*> params 所以我可以把它传递给execvp(..)

这对我来说似乎效率很低,但是有没有更好的方法可以在没有所有中间步骤的情况下将用户输入到std::vector<char*>中?

这个解决方案似乎适用于我想要的。不确定它的解决方案有多好。

std::vector<std::string> processString(std::string userInput)
{
   int j = 0;
   std::vector<std::string> subStrs;
   for (int i = 0; i < userInput.size(); i++)
   {
      bool sameSeq = false;
      if (isalnum(userInput[i]) || ispunct(userInput[i]))
      {
         subStrs.resize(subStrs.size() + 1);
         while (isalnum(userInput[i]) || ispunct(userInput[i]))
         {
            subStrs[j].push_back(userInput[i]);
            sameSeq = true; 
            i++;
         }
         if (sameSeq)
         {
            subStrs[j].push_back('');
            j++;   
         }
      }
   }
   return subStrs;
}