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=]'
字符,可以高枕无忧了)。结束。
我想创建一个简单的 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=]'
字符,可以高枕无忧了)。结束。