【问题标题】:string vector to 2d array of chars for shell program字符串向量到shell程序的二维字符数组
【发布时间】:2015-04-22 05:04:44
【问题描述】:

我正在编写一个 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;
}

获取总线错误:10

【问题讨论】:

    标签: c++ shell


    【解决方案1】:
    char* cmd;
    

    你只声明了一个指针,但你没有为它分配任何空间。

    【讨论】:

    • 如果我用 char* cmd[100] 分配空间;然后我得到错误:从不兼容的类型'char * [100]'分配给'char *'
    • 应该是char cmd[100];
    • 这部分有效。当我尝试使用 ls 命令时,我 cout args[0][0] = l.但我想要的是 args[0][0] = ls.
    • args[0][0] 只是单个字符。你可以cout &lt;&lt; args[0]看看你的逻辑是否正确。
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 2019-09-14
    • 2020-09-02
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多