chdir() - 没有这样的文件或目录

时间:2012-11-27 18:52:54

标签: c chdir

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上运行。

1 个答案:

答案 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)字符输入字符串,这将有效...我不确定第二个用户做的可能性...但是它不会伤害!