C strtok()和strcmp()问题 #包括 #包括 #包括 #包括 int main(int args,char*argv[]) { 常数int CBUFF=1024; 字符输入[CBUFF]; char-wkdir[CBUFF]; char*命令; printf(“欢迎来到MyShell…\n”); 而(1) { getcwd(wkdir、CBUFF); printf(“%s?”,wkdir); fgets(输入、CBUFF、标准输入); 命令=strtok(输入“”); 如果(strcmp(命令,“cd”)==0) { 字符*路径; path=strtok(空,“”); 如果(chdir(路径)!=0) { printf(“错误:无法将目录更改为指定路径”); } } 如果(strcmp(命令,“退出”)==0)中断; } 返回0; }
我在C strtok()和strcmp()问题 #包括 #包括 #包括 #包括 int main(int args,char*argv[]) { 常数int CBUFF=1024; 字符输入[CBUFF]; char-wkdir[CBUFF]; char*命令; printf(“欢迎来到MyShell…\n”); 而(1) { getcwd(wkdir、CBUFF); printf(“%s?”,wkdir); fgets(输入、CBUFF、标准输入); 命令=strtok(输入“”); 如果(strcmp(命令,“cd”)==0) { 字符*路径; path=strtok(空,“”); 如果(chdir(路径)!=0) { printf(“错误:无法将目录更改为指定路径”); } } 如果(strcmp(命令,“退出”)==0)中断; } 返回0; },c,C,我在C中创建一个非常简单的命令shell时遇到了一个问题。当我在指令后添加一个空格时,输入也只能以我想要的方式读取。我知道这与我不正确地使用strtok()函数有关,但我无法找出我做错了什么。我已经阅读了的文档,结果是一片空白 我想要的行为: 指令“退出”退出程序。 当前行为: 必须在指令后添加空格,以使其正确解析,即输入“exit”或“cd”。您在缓冲区中留下了尾随的换行符。摆脱它 #include <stdlib.h> #include <stdio.h> #incl
C
中创建一个非常简单的命令shell时遇到了一个问题。当我在指令后添加一个空格时,输入也只能以我想要的方式读取。我知道这与我不正确地使用strtok()函数有关,但我无法找出我做错了什么。我已经阅读了
的文档,结果是一片空白
我想要的行为:
指令“退出”退出程序。
当前行为:
必须在指令后添加空格,以使其正确解析,即输入“exit”或“cd”。您在缓冲区中留下了尾随的换行符。摆脱它
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int args, char* argv[])
{
const int CBUFF = 1024;
char input[CBUFF];
char wkdir[CBUFF];
char* command;
printf("Welcome to MyShell...\n");
while(1)
{
getcwd(wkdir, CBUFF);
printf("%s ? ", wkdir);
fgets(input, CBUFF, stdin);
command = strtok(input, " ");
if(strcmp(command, "cd") == 0)
{
char* path;
path = strtok(NULL, " ");
if(chdir(path) != 0)
{
printf("ERROR: COULD NOT CHANGE DIRECTORY TO SPECIFIED PATH");
}
}
if(strcmp(command, "exit") == 0) break;
}
return 0;
}
fgets()
将换行符保留在字符串中。将传递到strtok()
的分隔符字符串更改为“\r\n”
。当字符串比较等简单操作无法达到预期效果时,请始终打印出字符串,并在其周围设置防护装置,例如:printf(“qq%sQQQ\n”,command)
,以帮助您进行调试。如果您没有看到“qqxitqq”,那么您就知道您的字符串不完全包含“exit”。
char *got = fgets(input, CBUFF, stdin);
if (!got) return ; /* EOF -- treat like exit */
size_t gotlen = strlen(got);
if (got[gotlen] == '\n') got[gotlen] = 0;