我正在编写一个带有“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)正在打印。有什么想法吗?
提前感谢您的时间!
答案 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();
}