execvp()使用vector <string * =“”>

时间:2018-09-25 05:00:41

标签: c++ shell

_arguments = std::vector<std::string *>();

我已经声明了上述向量,并且想将其用于execvp()

int execvp(const char *file, char *const argv[]);

如何转换类型以适合此功能?

应该是这样的

execvp(_arguments[0], _arguments)

3 个答案:

答案 0 :(得分:3)

您将需要创建一个新的指针数组,以指向字符串的数据,而不是from datetime import datetime employee_train['DOJ']=employee_train['DOJ'].apply(lambda x: datetime.strptime(x,'%d-%m-%y')) employee_train['DOJ_month']=employee_train['DOJ'].apply(lambda x: x.month) employee_train['DOJ_year']=employee_train['DOJ'].apply(lambda x: x.year) 本身。有很多方法可以做到这一点,但是一种简单的方法是使用另一种INSERT INTO OPENQUERY([103.21.58.192], 'SELECT * FROM [amurajbg_ss].[dbo].[AccLedgers]') SELECT * FROM OPENQUERY([USER-PC\SQLEXPRESS], 'DECLARE @LastSyncDate AS DATETIME DECLARE @CurrentSyncDate AS DATETIME SELECT @CurrentSyncDate = GETDATE() SELECT @LastSyncDate = LastSyncDate FROM [CrushMate].[dbo].[Sync] SELECT * FROM [CrushMate].[dbo].[AccLedgers] WHERE CreatedDate BETWEEN @LastSyncDate AND @CurrentSyncDate AND Status=''True'' ') 和结构化的for循环:

std::string

答案 1 :(得分:1)

您不能直接使用它。您需要将指向每个string内部缓冲区的指针复制到另一个vector中。

假设arguments_的初始化如下:

std::vector<std::string*> arguments_ = {
    new std::string("mycmd"),
    new std::string("arg1"),
    new std::string("arg2")
}

您可以这样呼叫execvp

// execvp needs a NULL terminator, so make argv one element longer
// than arguments_
std::vector<char*> argv(arguments_.size() + 1);

// copy pointers to each string's buffer into the new vector
std::transform(arguments_.begin(), arguments_.end(), argv.begin(),
               [](std::string* arg) {
                   return arg->data();
               });

// The last element of argv was implicitly initialized to a null pointer
// so this isn't actually necessary.
// I just included it to be explicit
argv.back() = nullptr;

// pass a pointer to the array of char*s to execvp
execvp(argv[0], argv.data());

请注意,此示例依赖于C ++ 17中添加的std::string::data的非常量限定重载。如果您使用的是C ++标准的较旧版本,请改用&(*arg)[0]

答案 2 :(得分:-1)

_arguments = std::vector<std::string *>();

标准字符串类将其内部数据作为char数组进行管理。 要访问内部数据,请调用方法data()。返回类型为const char*

顺便说一句,std::string的指针类型不是必需的。

也请参阅参考文献:http://www.cplusplus.com/reference/string/string/data/