c - 第二次调用 strtok() 返回 null

标签 c char delimiter strtok

我正处于客户端文件中用于客户端/服务器通信的 while 循环的顶部。客户端获取用户输入(input),我需要将其转换为 cmd 和 cmd2 以便我的 ifs 工作。

假设用户输入“get lname”(这对程序来说是一个很好的命令)。 使用以下代码,cmd = "get"(耶!),但 cmd2 = "(null)"

输入是一个字符输入[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....

最佳答案

你的第二个 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/

相关文章:

c - 如何纠正我的 C 程序中的段错误

c - 如何在 C 中使用 sscanf 扫描多个单词?

linux - 在 Linux 中拆分平面文件并添加分隔符

c - 如何在C中定义枚举类型(enum)?

c - 双指针使用错误

c++ - 打印时指向常量的指针与指向非常量的指针的行为不同

batch-file - 如何批量获取定界字符串的第一部分?

c - 在 C 中使用不同的分隔符拆分字符串

C:如何将struct打包和解包到char缓冲区中?

c 文件输入函数无法按预期工作