使用fwrite和double指针将2D数组输出到文件

Laz*_*rks 4 c file-io fwrite multidimensional-array

我动态分配了一个2D数组,用双指针访问,如下所示:

  float **heat;
  heat = (float **)malloc(sizeof(float *)*tI); // tI == 50
  int n;
  for(n = 0; n < tI; n++){ // tI == 50
            heat[n] = (float *)malloc(sizeof(float)*sections); // sections == 30
    }
Run Code Online (Sandbox Code Playgroud)

在用值填充所有元素之后(我确定它们都被正确填充),我试图将它输出到这样的文件:

fwrite(heat, sizeof(heat[tI-1][sections-1]), ((50*30)-1), ofp);
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

fwrite(heat, sizeof(float), ((50*30)-1), ofp);
Run Code Online (Sandbox Code Playgroud)

我想尝试输出这个2D阵列吗?

我知道我的文件I/O正在工作(文件指针ofp不为空,并以十进制方式写入文件),但当我尝试使用fwrite写入时,非常奇怪的字符和消息正在输出到我的输出文件在二进制.

我知道这heat[tI-1][sections-1]也确实在2D数组的范围内.我刚刚使用它,因为我知道这是我持有的最大元素.

我的输出是很多NULL,有时是奇怪的系统路径.

Gis*_*way 6

据我所知你应该使用:

for(int n = 0; n < tI; n++)
{
  fwrite(heat[n], sizeof(float),sections, ofp);
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ess 5

你无法一次性写出来,因为热量数组中的每个项目都分配了一个单独的内存段.您需要循环加热阵列并一次保存一个零件.

你需要做更像这样的事情:

for (n = 0; n < tI; n++)
  fwrite(heat[n], sizeof(float), sections, ofp);
Run Code Online (Sandbox Code Playgroud)