【发布时间】:2015-01-21 09:23:15
【问题描述】:
我的代码应该将一个字符数组解析为 ***char,因此它首先将其拆分为 '|' char 然后由空格、换行符等转换成单词。示例输入/输出:
I = ls -l | sort | unique
O =
*cmds[1] = {"ls", "-l", NULL};
*cmds[2] = {"sort", NULL};
*cmds[3] = {"unique", NULL};
上面是指向char数组的指针,所以按单词分割,下面是***char,上面有指向上面指针的指针
char **cmds[] = {1, 2, 3, NULL};
现在,我没有看到我的错误(可能是因为我对 C 语言不太熟练),但是程序在我从 parsePipe() 内部调用 parse(..) 函数的第二次给出了段错误。有人可以帮忙吗?
void 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';
}
void parsePipe(char *line, char ***cmds)
{
char *cmd = strtok(line, "|");
int word_counter = 0;
while (cmd != NULL)
{
printf("Printing word -> %s\n", cmd);
word_counter++;
parse(cmd, *cmds++);
cmd = strtok(NULL, "|");
}
printf("This string contains %d words separated with |\n",word_counter);
}
void main(void)
{
char line[1024];
char **cmds[64];
while (1) {
printf("lsh -> ");
gets(line);
printf("\n");
parsePipe(line, cmds);
}
}
【问题讨论】:
-
这是什么?
char *1[] = {"ls", "-l", NULL};你不能命名一个以数字开头的变量。 -
这不是代码,它是一个示例 i/o 来展示它应该是什么样子..
-
argv按照惯例是char**。不要把椅子称为桌子。 -
您的程序是否打印任何输出?在您认为它崩溃之前尝试刷新缓冲区并查看它打印的内容。
-
评论者应该如何区分带有意外错误的代码和带有故意错误的代码?
标签: c parsing pointers char segmentation-fault