我花了很多时间寻找这个答案,尽管我找到了一些类似的答案,但似乎没有什么对我有用,让我非常沮丧:/
我想做的事情很简单。我想在 1 个函数中创建一个 2D 字符串数组(2D 字符串数组是 3D 字符数组),并且我想将其传递给另一个函数并在那里全局编辑它。如果 1 维可以动态,我会很高兴,但我在 malloc 方面遇到了很多麻烦,我什至会接受所有 3 维都是静态的选项。只要我可以将对它的引用传递给函数,将其填充到该函数中,然后在 main 中使用它即可。我正在寻找没有结构的解决方案。
只要我通过 array[5][5][5] 简单添加字符,然后使用 void 函数(char array[5][5][5])添加字符,我就成功地传递了 3d 字符数组。但我无法以这种方式添加字符串。我真的很着急。如果您不想回答我的问题,请给我一个解释该问题的链接,我会弄清楚的。
编辑:
void function(char* array[5][5]) {
array[0][0] = malloc(sizeof(char) * 5); array[0][0] = "something"
}
int main() {
char* array[5][5]; function(array); printf("%s", array[0][0]);
}
最佳答案
#include <stdio.h>
#include <malloc.h>
#include <string.h>
void doit ( char ***array, int x, int y, int z ) {
int i,j,k;
for ( i=0; i<x; i++ ) {
for ( j=0; j<y; j++ ) {
snprintf(array[i][j],z,"this is %d/%d",i,j);
}
}
}
void main ( int c, char**v ) {
int i,j,k,x=3,y=5,z=17;
char ***array = (char***)malloc(sizeof(char**)*x);
for ( i=0; i<x; i++ ) {
array[i] = (char**)malloc(sizeof(char*)*y);
for ( j=0; j<y; j++ ) {
array[i][j] = (char*)malloc(z);
}
}
doit(array,x,y,z);
for ( i=0; i<x; i++ ) {
for ( j=0; j<y; j++ ) {
printf("%d/%d %s\n",i,j,array[i][j]);
}
}
for ( i=0; i<x; free(array[i++]) ) {
for ( j=0; j<y; free(array[i][j++]) );
}
free(array);
}
使用 C++,可以通过更易读的方式实现相同的目的。
关于c - 将 3D 数组(字符串的 2D 数组)传递给函数并在那里编辑它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712268/