在C中检测空令牌

时间:2015-11-16 20:40:51

标签: c strtok strcmp

我使用strtok将数据从用户输入分配给变量cmd。如何检测cmd是否为空?与检查cmd是否为q类似,如下所示:

void readcmd() {
    char read_input[50];
    char* cmd;
    char* param;

    scanf("%[^\n]%*c",read_input);
    cmd = strtok(read_input, " ");
    param = strtok(NULL, " ");

    if (strcmp(cmd, "q") == 0) {
        printf("quitting\n");
        exit(0);
    }

    run(cmd, param);
}

2 个答案:

答案 0 :(得分:0)

如果无法从输入字符串中获取标记,则strtok()函数将返回NULL。

我假设你想知道在调用strtok()时是否有任何意义,换句话说,缓冲区是否包含任何用于标记的数据?

您可以在字符串的第一个字符中设置nul(\ 0)字节:

read_input[0] = '\0';

然后调用scanf() - 在scanf()返回后,您可以检查缓冲区的第一个字节是否仍然是一个空字节:

if (read_input[0] != '\0') {
    /* call strtok() */
} else {
    /* buffer is empty. */
}

当你将它传递给printf()或strtok()时,\ 0不会引起任何问题,你仍然可以使用printf()输出空字符串,因为\ 0字节只是告诉像strtok这样的函数( )和printf(),他们已到达字符串的末尾。

示例,您可以手工打包字符串:

read_input[0] = 'a';
read_input[1] = 'b';
read_input[2] = 'c';
read_input[3] = '\0';
printf("%s", read_input);

答案 1 :(得分:0)

如果(的strcmp(CMD,"&#34)== 0){      ... }