只是对 strtok 和 strcmp 有一点问题。
我试图通过 fgets 将用户的输入与一些预定的字符串进行比较:
char *token[100];
fgets(s, sizeof(s), stdin)
token[0] = strtok(s, " "); // Get first word
printf("tok: %s", token[0]);
printf("cmp: %d\n", strcmp(token[0], "/bin/echo");
显然这不是所有的代码,但这表明了我的问题——如果我输入“/bin/echo ...”(或其他任何东西),它将被放入token [0],并被打印出来。它打印正确,但是当它打印 cmp 值时,它永远不会为 0。对于 /bin/echo,由于某种原因, cmp 值是 1。
谢谢。
编辑以消除关于 s 和令牌的混淆:
char s[1024];
char *token[100];
编辑 2 - 添加了一些其他测试用例:我在标准输入中输入了“/bin/echo hello world”
token[0] = strtok(s, " \n\0"); // Get first word
printf("token[0] is: %s", token[0]);
printf("cmp: %d\n", strcmp(token[0], "/bin/echo"));
输出:
token[0] is: /bin/echo
cmp: 1
然后我尝试对标记字符串进行硬编码:
char str[] = "/bin/echo hello world";
token[0] = strtok(str, " ");
printf("token[0] is: %s", token[0]);
printf("cmp: %d\n", strcmp(token[0], "/bin/echo"));
输出:
token[0] is: /bin/echo
cmp: 0