我的代碼應該將一個字符數組解析爲*** char,以便首先按'|'分割它。字符,然後通過空格,換行符等轉換爲單詞。樣品I/O:在將字符串解析成*** char時出現Seg錯誤
I = ls -l | sort | unique
O =
上述*cmds[1] = {"ls", "-l", NULL};
*cmds[2] = {"sort", NULL};
*cmds[3] = {"unique", NULL};
是指向字符數組,由字,以便分裂,然後在下方是***炭與指針上述指針
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};'你不能命名一個以數字開頭的變量。 – Almo 2014-11-23 17:08:50
這不是代碼,它是一個示例I/O來展示它應該如何看起來像.. – user3885166 2014-11-23 17:10:34
'argv'按照慣例是'char **'。不要把椅子稱爲桌子。 – alk 2014-11-23 17:13:13