如何将2d动态数组写入C中的文件

问题描述 投票:0回答:2
 int row,col,i,j;
 int **matrix;

 printf("Col:");
 scanf("%d",&col);
 printf("Row:");
 scanf("%d",&row);

 matrix= (int**) malloc(row* sizeof(int));
    if(NULL == matrix)
      {
      free(matrix);
      printf("Error.\n");
      exit(-1);
      }
for (i=0;i<row;i++)
{
  matrix[i] = (int*) malloc(col* sizeof(int));
    if(NULL == matrix[i])
      {
       free(matrix[i]);
       printf("Error.\n");
       exit(-1);
      }
}

for (i=0;i<col;i++)
   {
       for (j=0;j<row;j++)
     {
       matrix[i][j]=1+rand()%1000000;
     }
   }
FILE *tfile;


tfile=fopen("matrix.txt","w");
fwrite(matrix,sizeof(matrix),matrix,tfile);
fclose(tfile);

所以我的问题是,每当我尝试执行此代码时,输​​出都是这样的:〜1°°1œÈ1œà1œa™w¬Æ

c arrays fwrite
2个回答
2
投票

这是错误的:

matrix= (int**) malloc(row* sizeof(int));

应该是sizeof(int*),而不是sizeof(int)

这也是错误的:

for (i=0;i<col;i++)
   {
       for (j=0;j<row;j++)
     {
       matrix[i][j]=1+rand()%1000000;

[分配数组时,先是row,然后是col,但是现在先是col,然后是row。应该是matrix[j][i]而不是matrix[i][j]

这确实是非常错误的:

fwrite(matrix,sizeof(matrix),matrix,tfile);

您为什么认为指针适合nmemb?指针不是数组。您有一个指针,而不是数组,因此不能使用单个调用fwrite来写出所有内容。您需要从循环内部逐行进行此操作。

即使您的程序正常运行,您仍将获得“加密”输出,因为您将以二进制形式编写一堆随机数。如果希望它们为ASCII文本,则必须使用类似fprintf的名称,而不是fwrite


0
投票

您需要修复此行:

矩阵=(int **)malloc(行* sizeof(int));

进入此

matrix =(int **)malloc(row * sizeof(int *));

Edit:正如Joseph指出的那样,这不是代码中的唯一问题。

© www.soinside.com 2019 - 2024. All rights reserved.