我有一个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分配,或者有更好的方法来执行我要尝试的操作?
答案 0 :(得分:1)
您不需要3D的字符指针数组,而需要2D的字符指针数组。
在Best way to allocate memory to a two-dimensional array in C?中,您可以分配二维字符指针数组,如下所示。
char* (*semicol) [col] = malloc(sizeof(char* [row][col]));
OR
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);
答案 1 :(得分:0)
这是我一次用于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\n", a[i][j]);
}
}
return 0;
}
答案 2 :(得分:-2)
#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\n", 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 '\0'
}
}
strncpy(t[0][0], argv[1], strlen(argv[1]));
printf("%s\n", t[0][0]);
return 0;
}
所以我写了一些代码,对其进行了测试,它似乎可以工作。.我不确定这是否是您要寻找的