【问题标题】:Parsing array of chars into ***char将字符数组解析为 ***char
【发布时间】:2014-11-23 15:29:45
【问题描述】:

gets()(这是一个输入到我的 shell 的命令)的结果,我有一个字符数组,例如“ls -l \ | sort”。现在我想要的是一个 char***,它可以保存指向特定命令的指针(所以用 | 分割)。以我为例:

*1[] = {"ls", "-l", "\", null}
*2[] = {"sort", null}

而我的 char*** 将是 {1,2}。问题是,我不知道在这个字符数组中会给我多少个字符串,所以我无法预先定义。我现在所拥有的只是通过空格将字符数组拆分为单词,我无法弄清楚如何做我真正需要的。

在我上面的输入/输出中,函数应该对“ls -l \|sort”和“ls -l \|sort”做出相同的反应

到目前为止我的代码:

int parse(char *line, char **argv)
{
    while (*line != '\0') {     
        while (*line == ' ' || *line == '\t' || *line == '\n')
            *line++ = '\0'; 
        *argv++ = line;     
        while (*line != '\0' && *line != ' ' && *line != '\t' && *line != '\n'){
            line++;
        }
    }
    *argv = '\0';  
    return 0; 
}

【问题讨论】:

  • 不清楚你想要达到什么。你如何从标准输入读取?
  • 用gets() 到char line[1024] 然后这个line 变量被传递给parse(char *line, char **argv),其中argv 是空的并且准备被这个函数填充.
  • 你想把一个字符串拆分成一个单词数组吗?
  • 不完全是 - 我想要 n+1 个单词数组用于 n "|"人物。所以 "ls -l \ | sort" 会产生 2 个数组,一个是 {"ls", "-l", "\", null},第二个是 {"sort", null}

标签: c arrays shell parsing char


【解决方案1】:

要分割一行,请使用strtok()。您可以将此函数与| 一起用作分隔符,然后与 一起使用:

#include <string.h>

int parse(char *line, char **argv, const char *delim)
{
    int word_counter = 0
    /* get the first word */
    char *word = strtok(line, delim);

    /* walk through other words */
    while (word != NULL) 
    {
       printf(" %s\n", word);
       word_counter++; 

       /* save word somewhere */

       word = strtok(NULL, delim);
    }

    printf("This string contains %d words separated with %s\n",word_counter,delim);
}

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 2017-02-02
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2017-04-04
    • 2014-03-04
    • 2019-12-25
    相关资源
    最近更新 更多