0
我正在寫一個C的shell,它應該實現幾個命令,其中之一是更改目錄命令。要改變目錄,我使用chdir(),但每次運行代碼時,都會出現分段錯誤(核心轉儲)錯誤。 這裏是我的代碼:在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的?
任何幫助表示讚賞,謝謝:)
您是否嘗試添加一些調試輸出以查看它在哪條線路上崩潰? – EkcenierK
看起來你正在'目錄'上做一個strtok,然後使用'dir'作爲chdir命令 - 這是故意的嗎? 此外,strtok中的輸出在第一次迭代時將爲「cd」,您需要再次使用'NULL'作爲字符串輸入來調用strtok以獲取下一個分隔字符串。 – NadavL
如果你的程序崩潰了,你應該在調試器中運行它來捕捉崩潰。這會告訴你哪裏崩潰,讓你檢查函數調用堆棧,甚至讓你走上調用堆棧,以便你能夠得到你的代碼(如果調試器已經不停止)。當您在代碼中找到崩潰時,您可以檢查變量的值以幫助您找出可能導致崩潰的原因。如果你仍然無法弄清楚,那就更新你的問題,告訴我們崩潰的位置以及所有涉及變量的值。 –