0

只是对 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
4

3 回答 3

1

这里我做了小程序

#include<string.h>
#include<stdio.h>

int main()
{
char str[] ="/bin/echo this is something";
  char * token[100];
  token[0] = strtok (str," ");

token[0] = strtok(str, " "); // Get first word
printf("cmp: %d\n", strcmp(token[0], "/bin/echo"));
return 0;
}

在这里,我静态存储了输入字符串而不是 fgets()

这很好用。

http://codepad.org/IrGAXT8f

于 2013-04-12T11:17:05.437 回答
0

利用

char token[1000];
strcpy(token,strtok(s," "));

字符串不能像这样在 c 中直接分配 :)

另外,包括 string.h

于 2013-04-12T11:07:36.077 回答
-1

需要动态分配内存来复制字符串。首先阅读动态内存管理(malloc、calloc 等...)

编辑: http: //ideone.com/0UxEwO - 为我工作

#include <stdio.h>
#include <string.h>

int main()
{
    char s[1024];
    char *token[100];
    fgets(s, sizeof(s), stdin);
    token[0] = strtok(s, " \n\0");
    printf("token[0] is: %s", token[0]);
    printf("cmp: %d\n", strcmp(token[0], "/bin/echo"));
}
于 2013-04-12T11:11:09.597 回答