strtok最后返回null

时间:2013-09-12 18:08:13

标签: c shell null strtok

我正在编写一个带有“echo”命令的shell。例如,如果用户输入“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

shell打印出来

hello world
 (null)

我很困惑为什么(null)正在打印。有什么想法吗?

提前感谢您的时间!

2 个答案:

答案 0 :(得分: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);                        -----+
    }

    }

答案 1 :(得分:0)

您在while循环的开头缺少space = strtok(NULL, " ");

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

doA();
while(checkA()) {
  doA();
}