【发布时间】:2021-09-25 23:44:39
【问题描述】:
我正在尝试制作一个 shell 程序并正在处理 mkdir,我正在读取用户输入并使用 sscanf 将其分成多个段,然后尝试使用 strcmp 检查第一个单词是否为“mkdir”,即 strcmp如果我在不使用 sscanf 的情况下保留标准输入,则可以工作。有人可以告诉我为什么它不能这样工作,以及如何解决它? 谢谢,
//#include "parser.c"
#include <stdio.h>
# include <sys/stat.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#ifndef MAX_BUF
#define MAX_BUF 200
#endif
int main(void)
{
while (1) {
printf("Enter a command: ");
char input[20];
char line[4][20];
fgets(input, 20, stdin);
sscanf(input, "%s %s", line[0], line[1]);
if(strcmp(line[0], "mkdir")) {
char path[MAX_BUF];
getcwd(path, MAX_BUF);
strcat(path, "/");
strcat(path, line[1]);
mkdir(path, 0700);
printf(path);
}
//printf("output %s", input);
}
}
【问题讨论】:
-
你应该尝试 strcmp(line[0], "mkdir") == 0 因为 strcmp(a,b) 如果 a 0否则(见man7.org/linux/man-pages/man3/strcmp.3.html)。例如: strcmp 在您的情况下返回 0,并且 if 条件评估为 false。
-
如果一个函数没有返回你所期望的,第一步是检查函数文档的返回值规范
-
这能回答你的问题吗? why is strcmp not working in c?
-
这不是你检查
strcmp结果stackoverflow.com/q/69308112/995714的方式