2

我正在编写一个带有“echo”命令的外壳。例如,如果用户输入“echo hello world”,shell 会打印出“hello world”。

我的代码如下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

  int MAX_INPUT_SIZE = 200;
  char input[MAX_INPUT_SIZE];
  char *command;

  printf("shell> ");
  fgets(input, MAX_INPUT_SIZE, stdin);

  //find first word
  char *space;
  space = strtok(input, " ");
  command = space;

  // printf("command: %s\n",command);

  //echo command
  if (strncmp(command, "echo", MAX_INPUT_SIZE) == 0) {
    while (space != NULL) {

      space = strtok(NULL, " ");
      printf("%s ", space);
    }

    }

  return (EXIT_SUCCESS);

}

当我运行这个时,输入

echo hello world

外壳打印出来

hello world
 (null)

我对为什么打印 (null) 感到困惑。有任何想法吗?

在此先感谢您的时间!

4

2 回答 2

0

space = strtok(NULL, " ");在 while 循环的开头丢失了。

根据我的经验,使用 while 循环具有以下结构:

doA();
while(checkA()) {
  doA();
}
于 2013-09-12T18:25:40.727 回答
0

修复如下:-

if (strncmp(command, "echo", MAX_INPUT_SIZE) == 0) {
   space = strtok(NULL, " "); //eat the "echo"
    while (space != NULL) {
       printf("%s ", space);                         <----+
      space = strtok(NULL, " ");                          |     
//      printf("%s ", space);                        -----+
    }

    }
于 2013-09-12T18:16:34.807 回答