int main(int argc, char **argv)
{
char input[150];
char change[2] = "cd";
char *directory;
while(1) {
prompt();
fgets(input, 150, stdin);
if(strncmp(change, input, 2) == 0) {
directory = strtok(input, " ");
directory = strtok(NULL, " ");
printf(directory);
chdir(directory);
perror(directory);
}
if(feof(stdin) != 0 || input == NULL) {
printf("Auf Bald!\n");
exit(3);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我开始这个并输入"cd test"时,我得到"没有这样的文件或目录".但是有一个目录"test".
在Arch Linux上运行.
从手册页:
fgets() 从流中最多读入一个小于 size 的字符并将它们存储到 s 指向的缓冲区中。读取在 EOF 或换行符后停止。如果读取换行符,则将其存储到缓冲区中。
问题是'\n'您从 获得的字符串末尾有一个换行符fgets(),您需要将其删除:
fgets(input, 150, stdin);
input[strlen(input)-1] = '\0';
Run Code Online (Sandbox Code Playgroud)
还:
char change[2] = "cd";
Run Code Online (Sandbox Code Playgroud)
应该是change[3],它是 2(表示“cd”)+ 1('\0'自动为您放置的 NULL 终止符)。
那么它应该可以工作。
编辑:
另一种选择是更改调用,strtok()以便:
directory = strtok(NULL, " \n");
Run Code Online (Sandbox Code Playgroud)
如果用户通过回车键或通过 EOF(Linux 上的 ctrl + d)字符输入字符串,这将起作用...我不确定用户执行第二个操作的可能性有多大...但它不能'别受伤!