이 문제는 나를 좌절시킵니다. 나는 전에 그것을 풀어 봤지만 정확히 어떻게 더 이상 기억할 수없고 그것이 몇 번이고 올랐다!C에서 문자열 배열로 문자열 분할
과일 목록과 같이 쉼표로 구분 된 문자열이 표시됩니다. 문자열을 쉼표로 문자열 배열로 분할하려고합니다. 분할 왜곡이 계속 발생하는 이유를 알 수 없습니다. 내가 사용 된 문자열이 읽기 전용 액세스 할 수있는 일정한 것을
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' 한 단어를 복사하기 시작 아닌가요? 첫 번째 쉼표 뒤에 *를 가리 킵니다. – usr2564301
my_words [i] = NULL; -이 모든 컴파일합니까? 그렇다면이 시점에서 i의 가치는 무엇입니까? – Silvester
또한,'strtok()'은 주어진 문자열에 쓰고 문자열 상수를 전달합니다. –