Трехуровневый косвенный указатель на символ в C вызывает ошибку сегмента
Я получил ошибку ошибки сегмента в строке с комментариями, которая содержит множество знаков равенства ниже.
Функция ниже str_spit
Я написал это, потому что я хочу разделить строку, используя определенный символ, как запятая и т. Д.
Пожалуйста помоги.
int str_split(char *a_str, const char delim, char *** result)
{
int word_length = 0;
int cur_cursor = 0;
int last_cursor = -1;
int e_count = 0;
*result = (char **)malloc(6 * sizeof(char *));
char *char_element_pos = a_str;
while (*char_element_pos != '\0') {
if (*char_element_pos == delim) {
char *temp_word = malloc((word_length + 1) * sizeof(char));
int i = 0;
for (i = 0; i < word_length; i++) {
temp_word[i] = a_str[last_cursor + 1 + i];
}
temp_word[word_length] = '\0';
//
*result[e_count] = temp_word;//==============this line goes wrong :(
e_count++;
last_cursor = cur_cursor;
word_length = 0;
}
else {
word_length++;
}
cur_cursor++;
char_element_pos++;
}
char *temp_word = (char *) malloc((word_length + 1) * sizeof(char));
int i = 0;
for (i = 0; i < word_length; i++) {
temp_word[i] = a_str[last_cursor + 1 + i];
}
temp_word[word_length] = '\0';
*result[e_count] = temp_word;
return e_count + 1;
}
//this is my caller function====================
int teststr_split() {
char delim = ',';
char *testStr;
testStr = (char *) "abc,cde,fgh,klj,asdfasd,3234,adfk,ad9";
char **result;
int length = str_split(testStr, delim, &result);
if (length < 0) {
printf("allocate memroy failed ,error code is:%d", length);
exit(-1);
}
free(result);
return 0;
}
2 ответа
Решение
Я думаю ты имеешь ввиду
( *result )[e_count] = temp_word;//
вместо
*result[e_count] = temp_word;//
Эти два выражения эквивалентны только тогда, когда e_count
равно 0.:)
[]
имеет более высокий приоритет, чем *
так что, вероятно, скобки решат эту проблему:
(*result)[e_count] = temp_word;
Я не проверял больше проблем в коде. Подсказка: strtok()
может сделать вашу работу просто отлично.