【发布时间】:2016-12-22 21:51:20
【问题描述】:
我在分隔传递给函数的字符串内容时遇到了问题。该函数使用如下字符串调用:
ADD:Nathaniel:50
其中 ADD 是协议名称,Nathaniel 是键,50 是值,都用 : 分隔。
我的代码如下所示:
bool add_to_list(char* buffer){
char key[40];
char value[40];
int* token;
char buffer_copy[1024];
const char delim[2] = ":";
strcpy(buffer_copy, buffer);
token = strtok(NULL, delim);
//strcpy(key, token);
printf("%d",token);
printf("%p",token);
while(token != NULL){
token = strtok (NULL, delim);
}
//strcpy(value, token);
printf("%s", key);
printf("%s", value);
push(key, value);
return true;
}
我要做的是使用strtok() 将每个键和值存储在一个单独的变量中。请注意,我试图存储第二个和第三个值(Nathaniel 和 50)而不是第一位(ADD)。
当我运行代码时,它给了我一个分段错误,所以我猜我试图访问一个无效的内存地址而不是一个值。我只需要存储字符串的第二和第三位。有人可以帮忙吗?
编辑: 我已将代码更改为如下所示:
bool add_to_list(char* buffer){
char *key, *value, *token;
const char *delim = ":";
token = strtok(buffer, delim);
//printf("%d",token);
printf("%s",token);
key = strtok(NULL, delim);
value = strtok(NULL, delim);
printf("%s", key);
printf("%s", value);
//push(key, value);
return true;
}
但我仍然遇到相同的分段错误(核心转储)错误
【问题讨论】:
-
您永远不会在
key或value中存储任何内容。 -
int* token;-->char *token; -
const char[2] delim->const char* delim -
看在上帝的份上,使用
strsep而不是糟糕的strtok。