微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

chdir(<directory>) 不改变目录:没有这样的文件或目录

如何解决chdir(<directory>) 不改变目录:没有这样的文件或目录

我想创建一个简单的 C++ 程序,改变目录。

int main(int argc,char * argv[]){
//...
char input[256];
char *command;

//read command
fgets(input,256,stdin);

// CODE ADDED WITH HELP
command = strchr(input,'\n');
    
if(command){
    *command = '\0';
}
// CODE ADDED WITH HELP

if(strncmp(input,"cd ",3)==0){
    strtok(input," ");
    command = strtok(NULL,"\0");
    if(chdir(command) != 0){
        perror("Error while changing directory. Please try again!");
    }
}
//...
}

在上面的程序中,您可以看到注释“CODE ADDED WITH HELP”之间的代码。这是后来加的。该程序现在可以运行,但我试图了解为什么它现在可以运行,为什么以前不可以。

如果您认为添加代码段已删除,我会在尝试更改目录时收到错误“没有这样的文件或目录”。在我得到一些帮助并添加了几行代码之后,我现在可以成功更改目录了。

我试图了解这段代码在我试图实现的上下文中究竟做了什么,以及为什么没有它它就无法工作。

解决方法

fgets(input,256,stdin);

这会读取一行文本,包括尾随的换行符Enter 键生成“换行符”,它是输入的一部分。

chdir(command);

除非采取其他措施,否则尾随换行符将保留在 command 中。

计算机编程的黄金法则写道:“您的计算机将始终完全按照您的指示执行操作,而不是您希望它执行的操作”。因此,假设您有一个名为“book”的子目录,您输入了“book”作为程序的输入。

由于上述原因,command 的内容将是 "book\n",并且会尝试将当前目录更改为名称为 "book\n" 的目录,即“book”后跟一个换行符。这将是您将告诉您的计算机执行的操作。由于没有这样的目录,您的计算机将无法按照您的要求进行操作。

添加的代码只是查找尾随的换行符,该换行符始终是输入的最后一个字符并将其替换为 '\0'。显示的代码使用 C 风格的字符串,以 '\0' 字符终止(原始读取输入以换行符结尾,fgets 有助于在此之后添加原始 '\0' 字符,可以安息了)。结束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。