我有一个 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;
}
所以我写了一些代码,测试了它,它似乎有效。我不确定这是否是你要找的