我正在尝试使用strtok()
来解析由空格分隔的字符串。据我所知,我正确使用它,但它不会在ideone.com上运行。以下代码有什么问题吗?我得到Runtime error time: 0 memory: 2288 signal:11
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static void test(char *command)
{
char* output = strtok(command, " ");
printf("%s\n", output);
}
int main(void) {
test("set_rate 200");
return 0;
}
Here如果您想尝试,请访问ideone.com。
答案 0 :(得分:4)
答案 1 :(得分:3)
当strtok
修改字符串时,它要求字符串不在只读内存中。因此,当您将字符串文字传递给测试函数时,它会崩溃。
这样更好:
char s[] = "set_rate 200";
test(s);
答案 2 :(得分:3)
strtok
将修改作为第一个参数传递的字符串,因此您无法传递字符串文字,请像这样更改main
:
int main(void) {
char str[] = "set_rate 200";
test(str);
return 0;
}
str
这里是一个char
数组,但不是字符串文字。
答案 3 :(得分:2)
当您传递存储在只读内存中的硬编码字符串时。
strtok()
不适用于只读内存的字符串。
您需要使用字符串变量而不是字符串文字。
您可以先将字符串存储在某个变量中,然后将其传递给函数。
char[]="set_rate 200";
test(str);
参见示例:
char *str = malloc(20);
char *tok = NULL;
int len = 0;
strcpy(str, "This is a string");
len = strlen(str);
printf("string before strtok(): %s\n", str);
tok = strtok(str, " ");
while (tok) {
printf("Token: %s\n", tok);
tok = strtok(NULL, " ");
}
修改
来自@Yu Hao评论我正在添加这个
char *str = "set_rate 200";
test(str); // This won't work. here str is pointer to the string literal.