chdir(<directory>) 不更改目录:没有那个文件或目录

chdir(<directory>) doesn't change directory: No such file or 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 = '[=11=]';
}
// CODE ADDED WITH HELP

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

在上面的程序中,您可以看到注释“代码添加帮助”之间的代码。这是后加的。该程序现在可以运行,但我想了解为什么它现在可以运行以及为什么以前不能运行。

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

我试图了解这段代码在我想要实现的目标的上下文中到底做了什么,以及为什么没有它它就不能工作。

fgets(input, 256, stdin);

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

chdir(command);

除非采取额外措施,否则尾随换行符将保留在 command.

计算机编程的黄金法则是:“您的计算机将始终准确地执行您告诉它执行的操作,而不是您希望它执行的操作”。因此,假设您有一个名为“book”的子目录,并且您输入了“book”作为程序的输入。

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

添加的代码只是找到尾随的换行符,它始终是最后输入的字符,并将其替换为 '[=17=]'。显示的代码使用 C 风格的字符串,以 '[=17=]' 字符结束(原始读取输入以换行符结束,fgets 有助于在之后添加原始 '[=17=]' 字符,可以高枕无忧了)。结束。