我有以下代码:
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)。我怎么能这样做?
答案 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说的......你应该注意关于类型不匹配的编译器警告!