我在客户端文件中的while循环顶部进行客户端/服务器通信。客户端获取用户输入(输入),我需要将其转换为cmd和cmd2以使我的ifs工作。
假设用户输入"获取lname" (这是该计划的一个很好的命令)。 使用以下代码,cmd =" get" (yay!),但是cmd2 ="(null)"
输入是char输入[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....
答案 0 :(得分:2)
你的第二个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;
}
答案 1 :(得分:0)
第一次调用strtok后,第一个参数传递NULL。该函数存储一个静态var来记住它离开的位置。
http://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm