c语言基础库有字符串分割strtok,但是由于不可重入,很多都自己写,下面的代码实现类似和python 的split函数差不多, 只是我将分隔符定为换行符’\n’。
代码如下:
int split_line(const char *str, char ***str_lines, int *len)
{
char *s = "\n";
char *b_str = (char *)malloc(strlen(str));
memcpy(b_str, str, strlen(str));
char *b_str_tmp = b_str;
int cnt = 0;
char *buf = strstr(b_str, s);
while (buf != NULL)
{
cnt++;
b_str = buf + strlen(s);
buf = strstr(b_str, s);
}
*str_lines = (char **)malloc(sizeof(char *) * cnt);
b_str = b_str_tmp;
int i = 0;
buf = strstr(b_str, s);
while (buf != NULL)
{
buf[0] = '\0';
(*str_lines)[i] = b_str;
b_str = buf + strlen(s);
buf = strstr(b_str, s);
i++;
}
*len = cnt;
return 0;
}
调用如下:
int test(){
char data[] = "aaa\na\nbbb\nc\nee\n";
char **data_;
int data_len;
split_line(data, &data_, &data_len);
return 0;
}
代码可能还有优化的地方,欢迎交流。