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

4

1 回答 1

4

手册页

fgets() 从流中最多读入一个小于 size 的字符,并将它们存储到 s 指向的缓冲区中。在 EOF 或换行符后停止读取。如果读取了换行符,则将其存储到缓冲区中。

'\n'问题是您的字符串末尾有一个换行符fgets(),您需要将其删除:

fgets(input, 150, stdin);
input[strlen(input)-1] = '\0';

还:

char change[2] = "cd";

那应该是,它是 2(对于“cd”)+ 1 用于自动为您放置change[3]的 NULL 终止符。'\0'

然后它应该工作。

编辑

另一种选择是更改strtok()调用,以便:

directory = strtok(NULL, " \n");

如果用户通过回车键或 EOF(Linux 上的 ctrl + d)字符输入字符串,这将起作用......我不确定第二个用户执行的可能性有多大......但它不能不疼!

于 2012-11-27T19:05:56.620 回答