Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于shell程序的二维字符数组的字符串向量_C++_Shell - Fatal编程技术网

C++ 用于shell程序的二维字符数组的字符串向量

C++ 用于shell程序的二维字符数组的字符串向量,c++,shell,C++,Shell,我正在编写一个shell程序,我知道execvp需要接收execvp(args[start],args)。最初,我读入命令并将其解析为字符串,存储“|”,以了解多个命令的拆分位置。现在我试着将向量转换成二维字符数组。我不知道这是否正确,但我认为每一行都是一个带有一组命令和参数的char*。这样我就可以在设置管道时循环使用它。以下是我目前掌握的代码: char** vectorToChar(char** arr, vector<string> cmdsAndArgs) { ch

我正在编写一个shell程序,我知道execvp需要接收execvp(args[start],args)。最初,我读入命令并将其解析为字符串,存储“|”,以了解多个命令的拆分位置。现在我试着将向量转换成二维字符数组。我不知道这是否正确,但我认为每一行都是一个带有一组命令和参数的char*。这样我就可以在设置管道时循环使用它。以下是我目前掌握的代码:

char** vectorToChar(char** arr, vector<string> cmdsAndArgs)
{
    char* cmd;
    char** args;

    int i = 0;
    int j = 0;
    for (vector<string>::iterator it = cmdsAndArgs.begin(); it < cmdsAndArgs.end(); it++) {
        string s = *it;
        if (s == "|") {
            cmd[j] = 0;
            args[i] = cmd;
            i++;
            j = 0;
        } else {
            cmd[j] = *(char*)s.c_str();
            j++;
        }
    }
    cmd[j] = 0;
    args[i] = cmd;
    args[++i] = 0;

    cout << endl << args[0][0] << endl;

    return args;
}
char**vectorchar(char**arr,vector cmdsAndArgs)
{
char*cmd;
字符**args;
int i=0;
int j=0;
对于(vector::iterator it=cmdsAndArgs.begin();it您只声明了一个指针,但没有为它分配任何空间。

如果我用char*cmd[100]分配空间,那么我会得到错误:从不兼容的类型char*[100]分配给“char*”,它应该是
char cmd[100];
部分有效。当我尝试使用ls命令时,我不能使用args[0][0]=l。但我想要的是args[0][0]=ls.
args[0][0]
仅为单个字符。您可以
cout
char* cmd;