c - 将 3D 数组(字符串的 2D 数组)传递给函数并在那里编辑它

标签 c arrays 3d

我花了很多时间寻找这个答案,尽管我找到了一些类似的答案,但似乎没有什么对我有用,让我非常沮丧:/

我想做的事情很简单。我想在 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/

相关文章:

c++ - 实现Z缓冲区算法

c# - 为什么这个相机不能连续偏航?

c - strlen 与零长度字符串不一致

c - C 中的有符号和无符号

javascript - 扁平化分层 json 数据以用于表格显示

php - 从复选框形式创建数组

ios - `OpaqueJSValue`中的 `JavaScriptCore`从哪里来?

c - gcc 在 amd64 上支持 128 位 int 吗?

java - 在java中从文本文档填充两个数组

c++ - 取消投影和重新投影的精度损失