我使用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);
}
答案 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){ ... }