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);
}
}
}
当我开始这个并输入“cd test”时,我得到“没有这样的文件或目录”。但是有一个目录“test”。
在Arch Linux上运行。
答案 0 :(得分:4)
来自man page:
fgets()从流和中读取最多一个小于大小的字符 将它们存储到s指向的缓冲区中。读后停止了 EOF或换行符。 如果读取换行符,则将其存储到缓冲区中。
问题是你在'\n'
获得的字符串末尾有换行符fgets()
,你需要删除它:
fgets(input, 150, stdin);
input[strlen(input)-1] = '\0';
此外:
char change[2] = "cd";
那应该是change[3]
,它是2(对于“cd”)+ 1为NULL终止符'\0'
,它会自动为你安排。
然后它应该工作。
修改强>:
另一种选择是更改strtok()
来电:
directory = strtok(NULL, " \n");
如果用户通过回车键或通过EOF(Linux上的ctrl + d)字符输入字符串,这将有效...我不确定第二个用户做的可能性...但是它不会伤害!