我正在用c构建一个自定义shell,其中一个要求是,运行程序时的文件夹必须是“home”文件夹。
也就是说,如果您只键入cdcd ~就应该进入该目录。我已经实现了,但它不起作用。

char *basedir;
void init_prompt()
{
    getcwd(cwd,100);
    basedir = cwd;
}
void cd_me(char **argv)
{
    chdir(argv[1]);
    if(getcwd(cwd,100)!=0)
    {
        ;
    }
    if(strcmp("~\0",argv[1])==0||strcmp("\0",argv[1])==0)
        chdir(basedir);
}

关于如何解决这个问题有什么建议吗?
同样,当我打印basedir时,我得到了正确的输出。

最佳答案

 char *basedir;
 basedir = cwd;

你把basedir变成cwd的同义词。每当cwd改变时,basedir就会跟着改变。它是一个指针,不能记住自己的字符串,只能指向别人的字符串。
你必须复印一份。
 char basedir[100];
 strcpy(basedir,cwd);

根据需要添加边界检查和错误处理。

关于c - 我的cd功能无法转到主目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39716380/

10-12 16:17