如何分配三维char指针数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何分配三维char指针数组?相关的知识,希望对你有一定的参考价值。

我有一个3d数组的char指针:char ***semicols。而且我希望这些价值观能够达到某种程度

semicol[0][0] = "ls"
semicol[0][1] = "~"
semicol[1][0] = "man"
semicol[1][1] = "grep"

等等。我有一个char **args数组,我存储了它,我也知道这个数组中的分号数。我想创建更小的char** ARGS,它具有上面提到的结构,所以semicol[0] = {"ls", "~"}。但是我不知道每个分号参数的字符串数量,所以我不能把它变成静态的char *semicols[][]。那么我如何合理地为一个3d数组进行malloc,或者有更好的方法来做我想做的事情?

答案

你不需要3d数组的字符指针,但需要一个2d的字符指针数组。

Best way to allocate memory to a two-dimensional array in C?,您可以分配2d字符指针数组,如下所示。

char* (*semicol) [col] = malloc(sizeof(char* [row][col]));

要么

char* (*semicol) [col] = malloc(sizeof(*semicol) * row);  //avoids some size miscomputations, especially when the destination type is later changed. //Refer chqrlie's comment.

成功分配内存后,你可以做semicol[i][j] = "text";

您可以通过调用free(semicol);释放分配的内存

另一答案

这是我用于3D阵列的一次。

#include<stdio.h>
#include<stdlib.h>

int main(){
    int n = 3, m = 3;
    char ***a;

    // Malloc and store.
    a = (char***)malloc(sizeof(char**) * n);
    for(int i = 0; i <n; ++i){
        a[i] = (char**)malloc(sizeof(char*) * m);
        for(int j = 0; j < m; ++j){
            a[i][j] = "abc"; // <-- you can put your string here in place of "abc".
        }
    }

    // Print or process your array or whatever serves your purpose.
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < m; ++j){
            printf("%s
", a[i][j]);
        }
    }

    return 0;
}
另一答案
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    char ***t = malloc(sizeof(char) * 1);           // one pointer
    int i, j;

    char s[1][3][2] = {{"he", "ll", 0}};

    printf("%s
", s[0][0]);

    for( i = 0; i < 1; ++i )
    {
        t[i] = malloc(sizeof(char) * (argc - 1));       // not including program name
        for( j = 0; j < argc - 1; ++j )
        {
            t[i][j] = calloc(strlen(argv[j + 1]) + 1, sizeof(char));        // +1 for ''
        }
    }

    strncpy(t[0][0], argv[1], strlen(argv[1]));
    printf("%s
", t[0][0]);

    return 0;
}

所以我写了一些代码,测试它,它似乎工作......我不确定这是否是你正在寻找的

以上是关于如何分配三维char指针数组?的主要内容,如果未能解决你的问题,请参考以下文章

双指针将 char 数组值分配给 char 数组,结构使用 char 指针

我如何从用户那里接收字符串并将其分配到没有任何中间变量的指针数组中?

指针数组的动态内存分配

为啥指向 char 数组的指针必须需要 strcpy 才能为其数组分配字符而双引号分配不起作用?

指向对象的指针数组的动态分配

如何得到指针指向的数组的长度