我在客户机/服务器通信的客户机文件中处于while循环的顶部。客户端获取用户输入(input),我需要将其strtok到cmd和cmd2中,以便ifs工作。
假设用户输入“get lname”(这是程序的一个好命令)。
使用以下代码,cmd=“get”(耶!),但cmd2=“(空)”
输入是字符输入[30]
cmd和cmd2的char*初始化为空。
帮点忙?谢谢!
/*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/