2014-04-23 99 views
0

我处于客户端/服务器通信的客户端文件的while循环的顶部。客户端获得用户输入(输入),我需要将它放入cmd和cmd2中以供我的ifs工作。第二次调用strtok()返回null

假设用户输入“get lname”(这对程序来说是一个很好的命令)。 使用下面的代码,CMD = “获得”(耶!),但CMD2 = “(空)”

输入一个字符输入[30] cmd并CMD2是字符*初始化为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.... 

回答

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; 
} 
+0

仍然无法做到这一点:( 我把它切换到CMD2 = strtok的(NULL,““); 还是返回(空) – airvector222

+0

@ airvector222我不知道发生了什么错!我已经给我的“答案”增加了一个可运行的例子,但是,正如你所说的那样,它会打印'(null)'。 – ooga

+0

尝试在处理前输出'input',这与'strtok()'无关,和'scanf()'做的所有事情 –

相关问题