【发布时间】:2019-09-10 05:51:12
【问题描述】:
我正在尝试编写一个函数来拆分字符串(不使用 strtok)来了解它是如何工作的。到目前为止,我想出了以下几点:
char ** split_string(char * string, char sep) {
// Allow single separators only for now
// get length of the split string array
int array_length = 0;
char c;
for (int i=0; (c=string[i]) != 0; i++)
if (c == sep) array_length ++;
// allocate the array
char * array[array_length + 1];
array[array_length] = '\0';
// add the strings to the array
for (int i=0, word=0; (c=string[i]) != 0;) {
if (c == sep) {
i=0;
word ++;
} else {
array[i][word] = c;
i++;
}
}
return array;
}
这是我第一次使用指向指针(字符串列表)的指针,所以我有点不清楚如何执行此操作,您可能从上面的函数中可以看出。
这将如何正确完成?具体来说,返回类型是否正确?您如何将\0 添加到数组的末尾?
【问题讨论】:
-
好吧,但是你会感到失望,因为你已经声明了函数的本地指针数组,这样当
split_string返回时,你的char * array[array_length + 1];变得无效......如果你想动态分配一个指针数组,以便存储不在函数堆栈上,而是在堆上,并且将在函数返回后继续存在。选项 2 - 如果只是一分为二,您可以简单地返回一个指向原始字符串中的地址的指针,该地址将开始字符串的第二部分。
标签: c