c:传入变量的wordexp

时间:2012-09-17 23:25:22

标签: c++ c parsing arguments

我似乎无法让这个工作。我称之为wordexp()时工作得非常棒:

wordexp("beep", &p, 0);
w = p.we_wordv;
argc = p.we_wordc;

但是,我想传入一些用户将输入的值,然后从中获取argvargc。现在我有以下代码,但我总是收到“分段错误”或“EXC_BAD_ACCESS”:

char **parseCommand(char *args, int *argc) {
    printf("args %s\n", args);
    wordexp_t p;
    char **w;
    int i;
    char *beep;

    wordexp(args, &p, 0);

    w = p.we_wordv;
    argc = p.we_wordc;

    wordfree(&p);
    return w;
}

当我打印args时,会显示它。我甚至试过strcpy args到另一个字符串。但仍然得到错误。一定是傻事(或者用wordexp不能做到这一点)?

4 个答案:

答案 0 :(得分:5)

我怀疑你的问题是

  

函数wordfree()再次释放分配的内存。更确切地说,它没有释放它的参数,但它释放了数组we_wordv和指向的字符串。

所以你返回一个指向free内存的指针,当你访问它时,分段错误并不少见。

答案 1 :(得分:1)

从我的观点来看,如果你将p.we_wordv分配给'w',然后你破坏'p'对象/结构,整个内容(字段里面 - we_wordv)也被破坏意味着'w'指向一些随机数据,如果它们仍然有效,则它取决于编译器或当前的符文时间情况。

你应该使用malloc为p分配内存,然后复制内容并返回指针。

答案 2 :(得分:0)

您只能直接从main()访问argv []和argc。从那里你可以将它们传递给其他功能。

int main(int argc, char * argv[])
{
    char ** parsed = parseCommand(argc, argv);
    return 0;
}

答案 3 :(得分:0)

感谢您的回答。但是,看起来错误是因为它传递了一个带换行符的字符串而且它不喜欢这样。从字符串中删除换行符后,似乎现在正在工作。