【发布时间】:2016-03-20 21:24:45
【问题描述】:
我正在用 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?
感谢任何帮助,谢谢:)
【问题讨论】:
-
您是否尝试过添加一些调试输出以查看它在哪一行崩溃?
-
看起来您正在对“目录”执行 strtok,然后将“目录”用于 chdir 命令 - 这是故意的吗?此外,strtok 中的输出在第一次迭代中将是“cd”,您需要再次调用 strtok,并使用“NULL”作为字符串输入来获取下一个分隔字符串。
-
如果你的程序崩溃了,你应该在调试器中运行它来捕捉崩溃。这会告诉你在哪里它崩溃了,让你检查函数调用堆栈,甚至让你走上调用堆栈,这样你就可以找到你的代码(如果调试器还没有停在那里)。当您在代码中找到崩溃时,您可以检查变量的值以帮助您找出可能导致崩溃的原因。如果您仍然无法弄清楚,请更新您的问题,告诉我们崩溃的位置以及所有相关变量的值。
-
好的,这是我所做的更改: else if(strcmp(command,"cd")==0){ char *com = strtok(command," ");字符 *dir = strtok(NULL," "); if(chdir(dir)==-1){ perror("错误:"); //printf("错误:无法更改目录\n"); } else { printf("成功更改目录\n");现在,每当我运行它时,我都会收到此错误:错误:错误地址。无论我传递给它什么,它都会显示错误的地址。我尝试将 .. 传递给它以向上一个目录,但这也给出了错误的地址错误
-
将代码添加到问题中。不要忘记用换行符结束输出行。您没有检查
dir是否为空——考虑到崩溃,它可能是。别忘了,当你输入cd回家时,没有空格。
标签: c linux shell command-line command