C语言中的三维字符数组

C语言中的三维字符数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我想声明一个三维字符串数组 其中每行有两个字符串 在此,我可以宣布: char *szArray[][2] = { {"string1", "string2"}, {"string3", "string4"}, {"string5", "string6"}, {0, 0} }; 我想做同样的事情,但行数是动态分配的 这里您可以假设第一维度是动态决定的。 第二维度是2, 第三维度是25 在许多方面都尝试过,但没有运气 提前感谢!我没有收到任何错误: #includ

我想声明一个三维字符串数组 其中每行有两个字符串

在此,我可以宣布:

char *szArray[][2] = {
    {"string1", "string2"},
    {"string3", "string4"},
    {"string5", "string6"},
    {0, 0}
};
我想做同样的事情,但行数是动态分配的

这里您可以假设第一维度是动态决定的。 第二维度是2, 第三维度是25

在许多方面都尝试过,但没有运气

提前感谢!

我没有收到任何错误:

#include <stdio.h>

int main(){
char *szArray[][2] = { {"string1", "string2"}, {"string3", "string4"}, {"string5", "string6"}, {0, 0} };

 printf("%s\n", szArray[0][0]);
 printf("%s\n", szArray[2][0]);

}
但是您无法打印szArray[3][0][0],因为它是0,如果您想将值初始化为任何值,可以将其设置为“\0”,而不仅仅是0

我没有收到任何错误:

#include <stdio.h>

int main(){
char *szArray[][2] = { {"string1", "string2"}, {"string3", "string4"}, {"string5", "string6"}, {0, 0} };

 printf("%s\n", szArray[0][0]);
 printf("%s\n", szArray[2][0]);

}

但是您不能打印szArray[3][0][0],因为它是0。如果您想将值初始化为任何值,可以将其设置为“\0”,而不仅仅是0

好的,这里没有编译器进行双重检查,但您可以通过多种方法来执行此操作。最直接的方法是声明char[25][3]的向量并且让C++来为你做一些事情,比如向量FO,然后只是推回你的动态元素。但是,如果没有编译器,我不确定这会起作用,因为当涉及多维数组时,你可以有一个时髦的规则。你总是可以把数组作为一个第一遍去量度,以便让它工作得更好。向量,然后开始添加你想要的。你也可以使用向量-向量-向量-字符的方法,使用锯齿形字符数组,其中和的3维可以是动态的,这可能会更节省内存。这里有很多选择。

好的,这里没有编译器进行双重检查,但是你可以用很多方法来完成。最简单的方法是最重要的是声明char[25][3]的向量并且让C++来为你做一些事情,比如向量FO,然后只是推回你的动态元素。但是,如果没有编译器,我不确定这会起作用,因为当涉及多维数组时,你可以有一个时髦的规则。你总是可以把数组作为一个第一遍去量度,以便让它工作得更好。向量,然后开始添加你想添加的内容。你也可以使用向量-向量-向量-字符的方法,使用锯齿形字符数组,其中和的三维可以是动态的,这可能会更节省内存。这里有很多选择。

首先,你的问题不是三维字符数组指向
char
的二维指针数组。在C语言中,指针和数组不是一回事

为了回答您的问题,现代C语言C99中最简单的方法是使用可变长度数组VLA,用于您的目的

char szData[x][y][z];
其中,
x
y
z
是仅在运行时点击该声明时确定的变量或表达式

VLA的不便之处在于,您必须小心它们对于堆栈来说不会太大,并且必须通过分配给各个条目(这里是通过嵌套的
for
-循环)来初始化它们

继续使用字符串的二维数组示例

char* szData[x][y];
然后您必须将单个字符串分配给每个指针,或者将它们设置为
0

for (size_t i = 0; i < x; ++i)
   for (size_t j = 0; j < y; ++j)
     szData[i][j] = 0;
(大小i=0;i 对于(尺寸j=0;j首先,你的问题不是一个三维的
字符数组,而是一个指向
字符的二维指针数组。在C语言中,指针和数组不是一回事

为了回答您的问题,现代C语言C99中最简单的方法是使用可变长度数组VLA,用于您的目的

char szData[x][y][z];
其中,
x
y
z
是仅在运行时点击该声明时确定的变量或表达式

VLA的不便之处在于,您必须小心它们对于堆栈来说不会太大,并且必须通过分配给各个条目(这里是通过嵌套的
for
-循环)来初始化它们

继续使用字符串的二维数组示例

char* szData[x][y];
然后您必须将单个字符串分配给每个指针,或者将它们设置为
0

for (size_t i = 0; i < x; ++i)
   for (size_t j = 0; j < y; ++j)
     szData[i][j] = 0;
(大小i=0;i 对于(尺寸j=0;j
int n=0;
printf(“输入行数\n”);
scanf(“%d”和“&n”);
char***szData=(char***)malloc(n*sizeof(char**));
//为每行分配memroy
对于(int i=0;i
int n=0;
printf(“输入行数\n”);
scanf(“%d”和“&n”);
char***szData=(char***)malloc(n*sizeof(char**));
//为每行分配memroy
对于(int i=0;i