c - 使用 strtok 中的值传递给函数

标签 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)。我怎么能这样做?

最佳答案

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 不像第二个参数 delim 那样不是 const 限定的。

关于c - 使用 strtok 中的值传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566424/

相关文章:

c - 使用不同的数据类型逐行读取文件中的数据

带有来自另一个常量数组的变量的常量数组

c - 标记外部文件

c - 将 strtok 的指针分配给二维结构数组中的指针,所有条目都应该是唯一的,但打印出来是相同的

c - 无法使用 strtok 实现预期的解析输出

c - 将指针设置为 NULL,以便指向该地址的任何指针都为 NULL

c - fgets 无法读取换行符

c - 使用二分查找查找已排序字符串中的第一个大写字母

c - 从文件中的一行读取任意数量的以空格分隔的字符

c - 将函数中的 token (strtok)存储在主数组中