第二次调用strtok()返回null

时间:2014-04-23 21:26:33

标签: c char delimiter strtok

我在客户端文件中的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....

2 个答案:

答案 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