我目前有一段代码将1输入与变量进行比较...... 例如,当我输入" GET"它将它与我设置的字符串进行比较,然后打开一个文件。但是如果我想在输入中比较多个字符串呢?例如,如果有人输入" GET ./homepage.html"
所以第一个字符串GET表示他们想要检索文件,第二个字符串" ./ homepage.html"是他们想要查看的文件?
我对此的想法是使用GET +所有可能的文件组合的组合构建一个数组,然后使用strcomp
选择正确的文件并打开指定的文件..?但我不是100%关于如何将我的输入链接到整个数组?
当前代码如下,非常基本的字符串比较 - >打开并将文件写入stdout。
int main(int argc, char *argv[] ) {
MainStruct val;
parse_config(&val);
char userInput[100] = "success.txt";
char temp[100];
if (checkaccess() == 0)
{
parse_config(&val);
} else {
fprintf(stderr,"unable to load config file\n");
}
printf("Connected to Domain : %s", val.domain);
fgets(temp, 6, stdin);
temp[strcspn(temp, "\n")] = '\0';
if(strcmp(temp, "GET /") == 0 )
{
openfile(userInput);
} else {
printf("that was not a very valid command you gave\n");
}
}
编辑:我还应该提到第二个字符串输入也应该== userInput函数openfile
读入。不知道如何分离出两个字符串。
答案 0 :(得分:0)
有几种方法可以解决这个问题。最直接的方法是将您的全部输入内容读入temp
,然后将temp
分成带有strtok
之类的标记。输入行将包括您的命令(例如GET
)以及您需要采取的任何其他值。然后,如果您收到足够的输入(即GET
和filename
),您就可以做出决定,然后按照您的意愿做出回应。
下面是一个简短的示例,它创建一个char数组(字符串)数组,以保存作为temp
输入的标记。开头的几个定义将每个令牌限制为64
个字符,将最大令牌数限制为5
(根据需要调整)然后将temp
分成令牌并检查用户是否输入超过1个字。然后它会响应GET
并显示其收集的filename
。 (你可以采取你需要的任何行动)。它还会检查输入的令牌数量,以确保您不会尝试在数组末尾之外写入。
如果您有任何疑问,请查看并告知我们:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXISZ 64
#define MAXIN 5
int main (void) {
char temp[MAXISZ] = {0}; /* temp variable */
char input[MAXIN][MAXISZ] = {{0}}; /* array of strings to hold input */
size_t icnt = 0; /* number of input words */
size_t tlen = 0; /* length of temp read by fgets */
printf ("\n Enter command [filename]: ");
if (fgets (temp, MAXISZ, stdin) == NULL) {
printf ("error: fgets failed.\n");
return 1;
}
/* get length and trim newline */
tlen = strlen (temp);
while (tlen > 0 && temp[tlen - 1] == '\n')
temp[--tlen] = 0;
/* if temp contains a space */
if (strchr (temp, ' '))
{
/* break tmp into tokens and copy to input[i] */
char *p = NULL;
for (p = strtok (temp, " "); p != NULL; p = strtok (NULL, " "))
{
strcpy (input[icnt++], p);
/* check if MAXIN reached */
if (icnt == MAXIN)
{
printf ("error: MAXIN token exceeded.\n");
break;
}
}
/* if more than 1 word input, use 1st as command, next as filename */
if (icnt > 0)
{
if (strcmp (input[0], "GET") == 0)
printf ("\n You can open file : %s\n", input[1]);
}
}
else
printf ("\n Only a single word entered as command '%s'.\n", temp);
printf ("\n");
return 0;
}
<强>输出强>
$ ./bin/fgets_split
Enter command [filename]: GET /path/to/myfile.txt
You can open file : /path/to/myfile.txt
或
$ ./bin/fgets_split
Enter command [filename]: GET
Only a single word entered as command 'GET'.