【发布时间】:2014-12-15 20:51:11
【问题描述】:
这个问题让我很沮丧;我以前解决过它,但我不记得到底是怎么解决的了,而且一次又一次地出现!
给你一个字符串,就像一个水果列表,用逗号分隔。您想将字符串拆分为逗号处的字符串数组。我不知道为什么我不断收到分段错误!这是我的代码:
char** split(char *);
int count_words(char *);
int main(int argc, char **argv) {
char *my_list = "Apple, banana, cherry, dragonfruit, elderberry";
char **split_list = split(my_list);
/*int i = 0;
while(split_list[i] != NULL) {
printf("%s\n", split_list[i]);
i++;
}*/
return 0;
}
char** split(char *str) {
int num_words = count_words(str);
char **my_words = malloc((num_words + 1) * sizeof(char*));
const char delim[2] = ",";
char *token;
token = strtok(str, delim);
for(int i = 0; i < num_words; i++) {
my_words[i] = malloc(sizeof(char) * strlen(token));
strcpy(my_words[i], token);
token = strtok(NULL, delim);
}
my_words[i] = NULL;
return my_words;
}
int count_words(char *str) {
int cnt = 0;
while(*str != '\0') {
if(*str == ',') cnt++;
str++;
}
return ++cnt;
}
【问题讨论】:
-
从
token开始抄袭不是晚了一个字吗?它将指向右侧在第一个逗号之后。 -
my_words[i] = NULL; - 这可以编译吗?如果是这样,此时 i 的值是多少?
-
您正在尝试拆分只读字符串文字。
-
分割只读字符串是不行的。
-
一个建议,更仔细地格式化你的代码,你将来会很开心。 :)
标签: c string split segmentation-fault