我正处于客户端文件中用于客户端/服务器通信的 while 循环的顶部。客户端获取用户输入(input),我需要将其转换为 cmd 和 cmd2 以便我的 ifs 工作。
假设用户输入“get lname”(这对程序来说是一个很好的命令)。 使用以下代码,cmd = "get"(耶!),但 cmd2 = "(null)"
输入是一个字符输入[30] cmd 和 cmd2 是 char* 初始化为 NULL。
这里有一点帮助吗?谢谢!
/*Until the user exits the program*/
while(cmdNum != 7)
{
printf("\nPlease enter a command: ");
scanf("%30s", input);
cmd = strtok(input, " ");
printf("cmd: %s\n", cmd);
if(strcmp(cmd, "get") == 0)
{
cmd2 = strtok(NULL, "\0");
printf("cmd2: %s\n", cmd2);
pstatus = print(cmd, sockfd);
if(pstatus == 1)
{
printf("Error printing\n");
}
}
else if(strcmp(cmd, "put") == 0)..... etc, etc....
最佳答案
你的第二个 strtok
调用也应该使用一个空格作为它的分隔符参数,而不是 "\0"
,如果你考虑一下,它只是一个空的字符串。
更重要的是,您需要阅读整行内容,而 scanf
和 %s
不会这样做。它停在第一个空格处。请尝试使用 fgets
,但请记住它会保留换行符,因此请将其添加为分隔符。
#include <stdio.h>
#include <string.h>
int main() {
char input[50];
printf("Please enter a command: ");
fgets(input, sizeof input, stdin);
char *cmd = strtok(input, " \t\n");
printf("cmd: [%s]\n", cmd);
if (strcmp(cmd, "get") == 0) {
char *cmd2 = strtok(NULL, " \t\n");
printf("cmd2: [%s]\n", cmd2);
}
return 0;
}
关于c - 第二次调用 strtok() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23255498/