包含要放入字符串数组的子字符串的 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;
}
给定 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;
}