我花了很多时间来寻找这个答案,即使我找到了一些类似的答案,似乎也没有任何效果,这让我非常沮丧:/

我想做的很简单。我想在1个函数中创建字符串的2D数组(字符串的2D数组是chars的3D数组),并且我想将其传递给另一个函数并在那里进行全局编辑。如果1维可以动态运行,我会很高兴,但是我对malloc遇到了太多麻烦,我什至会接受所有3维都是静态的选项。只要我可以将对它的引用传递给函数,就将其填写在该函数中,然后在main中使用它即可。我正在寻找没有结构的解决方案。

只要我通过array [5] [5] [5]然后简单地添加chars,然后通过void函数(char array [5] [5] [5]),就设法传递了chars的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/

10-12 22:58