2

「echo」コマンドを持つシェルを書いています。たとえば、ユーザーが「echo hello world」と入力すると、シェルは「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

以下のように修正します:-

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 に答える
0

space = strtok(NULL, " ");while ループの先頭で欠落しています。

私の経験では、while ループを使用すると、次のような構造になります。

doA();
while(checkA()) {
  doA();
}
于 2013-09-12T18:25:40.727 に答える