包含要放入字符串数组的子字符串的 C 字符数组

C char array containing substrings to be put into array of strings

给定 char *line = {'a','[=10=]','b','[=10=]', 'c', '[=10=]'}

如何才能让 char **str_arr point/be 分配给 line 中的所有子字符串?

str_arr[str_arr_index] = line 仅适用于第一个子字符串,但它之后的任何内容都只是 NULL

str_arr = malloc(3 * sizeof (char *));
str_arr[0] = &line[0];
str_arr[1] = &line[2];
str_arr[2] = &line[4];

无法以编程方式执行此操作,因为无法知道 line 包含多少子字符串。 (正如无法从上面代码的输出中得知 str_arr 现在有三个指向三个子字符串的指针一样。)

首先声明

char *line = {'a','[=10=]','b','[=10=]', 'c', '[=10=]'}

无效这只能是像下面这样的数组

char *line = {'a','[=10=]','b','[=10=]', 'c', '[=10=]'}

这是生成子字符串的代码示例

#include "stdlib.h"
#include "stdio.h"

int main()
{   
    char line[] = {'a','[=12=]','b','[=12=]', 'c', 'v', '[=12=]', 'd', 'e', '[=12=]'};
    
    int size = sizeof(line) / sizeof(char);
    int count = 0;
    int start = 0;
    
    char *str_arr[size];   // the size can be optimized with reallocs or by counting the terminatin chars in the line
    
    for (int i = 0; i < size; ++i) {
        if (line[i] == '[=12=]') {
            str_arr[count] = &line[start];
            printf("string #%d -> %s \n", count + 1, str_arr[count]);
            start = i + 1;
            ++count;
        }
    }   
    
    return 0;
}