C语言 如何分配字符指针的 3d 数组



我有一个 3d 字符指针数组: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 数组。

从在 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("%sn", 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("%sn", 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("%sn", t[0][0]);
    return 0;
}

所以我写了一些代码,测试了它,它似乎有效。我不确定这是否是你要找的

相关内容

  • 没有找到相关文章

最新更新