如何解决包含要放入字符串数组的子字符串的 C 字符数组
给定 char *line = {'a','\0','b','c','\0'}
您将如何使 char **str_arr
指向/分配给 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','\0','b','c','\0'}
无效,只能是如下数组
char *line = {'a','\0'}
这是一个生成子字符串的代码示例
#include "stdlib.h"
#include "stdio.h"
int main()
{
char line[] = {'a','v','d','e','\0'};
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] == '\0') {
str_arr[count] = &line[start];
printf("string #%d -> %s \n",count + 1,str_arr[count]);
start = i + 1;
++count;
}
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。