我在C中编写一个shell,它应该实现几个命令,其中一个命令是更改目录命令。要更改目录,我使用chdir(),但每次运行我的代码时,都会出现分段错误(核心转储)错误。 这是我的代码:
.....
........
char *shell;
while((shell=readline("shell> ") )){
char *cmd = strtok(shell," ");
if(strcmp(cmd,"ls")==0)
{
//do something
}
else if(strcmp(cmd,"print")==0)
{
//do something
}
else if(strcmp(cmd,"cd")==0){
char *directory = strtok(NULL," ");
if(chdir(directory)==-1){
printf("Error\n");
}
else
{
printf("changed directories!");
}
}
add_history(shell);
}
我想我可能会错误地使用strtok?
感谢任何帮助,谢谢:)
答案 0 :(得分:1)
这个
char *directory = strtok(cmd," ");
应该是
char *directory = strtok(NULL," ");
当您致电strtok()
获取下一个令牌时,您会将NULL
传递给它。
此外,strtok()
不可重入。因此,即使您的计划要标记不同的字符串,也无法使用它。您可以在POSIX系统上使用strtok_r()
。