微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决包含要放入字符串数组的子字符串的 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 举报,一经查实,本站将立刻删除。