使用strtok中的值传递给函数

时间:2014-03-21 18:11:09

标签: c strtok

我有以下代码:

    char buffer[50];
    char * tok, tok2;
    buffer = "addition 1 2";
    tok = strtok(buffer, " ");
    // get the second token
    tok = strtok(NULL, " ");
    tok2 = tok;
    // get the last token
    tok = strtok(NULL, " ");
    // pass them to the function
    foo(atoi(tok2), atoi(tok));

然而,我得到了分段错误11.我想要做的是存储第二个值(整数1)和最后一个值(整数2)并将它们传递给foo(int a,int b)。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

char * tok, tok2;

上述语句将tok定义为char *类型和tok2类型char。它相当于

char *tok;
char tok2;

char *不是新类型。您应始终将*与变量关联,而不是类型。 您应该将该语句更改为

char *tok, *tok2;

您无法在C中分配数组。因此以下陈述是错误的 -

buffer = "addition 1 2";

您应该做的是使用字符串文字 -

初始化数组buffer
char buffer[] = "addition 1 2";

另请注意,函数strtok会修改其第一个参数。它的签名是

char *strtok(char *str, const char *delim);

由于这个原因,第一个参数str不是const,而不像第二个参数delim

答案 1 :(得分:1)

你不能将字符串文字分配给buffer,因为它是char数组,而不是char*(这甚至是如何编译的?)。

如果您使buffer成为char*,那么分配将有效,但strtok会尝试将其NUL终结符直接写入字符串文字,这可能是一个只读的记忆区域。

相反,您应该使用strcpy(buffer, "addition 1 2");将只读字符串复制到您的读写buffer

还有@ajay说的......你应该注意关于类型不匹配的编译器警告!