我在客户机/服务器通信的客户机文件中处于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/

10-13 09:48