Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中将二维动态数组写入文件 int行,列,i,j; int**矩阵; printf(“Col:”); scanf(“%d”列和列); printf(“行:”); scanf(“%d”行和第行); 矩阵=(int**)malloc(行*sizeof(int)); if(NULL==矩阵) { 自由(矩阵); printf(“错误。\n”); 出口(-1); } 对于(i=0;i_C_Arrays_Fwrite - Fatal编程技术网

如何在C语言中将二维动态数组写入文件 int行,列,i,j; int**矩阵; printf(“Col:”); scanf(“%d”列和列); printf(“行:”); scanf(“%d”行和第行); 矩阵=(int**)malloc(行*sizeof(int)); if(NULL==矩阵) { 自由(矩阵); printf(“错误。\n”); 出口(-1); } 对于(i=0;i

如何在C语言中将二维动态数组写入文件 int行,列,i,j; int**矩阵; printf(“Col:”); scanf(“%d”列和列); printf(“行:”); scanf(“%d”行和第行); 矩阵=(int**)malloc(行*sizeof(int)); if(NULL==矩阵) { 自由(矩阵); printf(“错误。\n”); 出口(-1); } 对于(i=0;i,c,arrays,fwrite,C,Arrays,Fwrite,这是错误的: 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"); ex

这是错误的:

 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);
它应该是
sizeof(int*)
而不是
sizeof(int)

这也是错误的:

matrix= (int**) malloc(row* sizeof(int));
为什么您会认为指针是
nmemb
的合适值?指针不是数组。您有指针,而不是数组,因此不能使用对
fwrite
的单个调用来写出所有内容。您需要从循环内部逐行执行此操作

即使您的程序运行正常,您仍然会得到“神秘”的输出,因为您将以二进制形式写入一组随机数。如果您希望它们是ASCII文本,那么您必须使用类似于
fprintf
的内容,而不是
fwrite
,这是错误的:

 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);
它应该是
sizeof(int*)
而不是
sizeof(int)

这也是错误的:

matrix= (int**) malloc(row* sizeof(int));
为什么您会认为指针是
nmemb
的合适值?指针不是数组。您有指针,而不是数组,因此不能使用对
fwrite
的单个调用来写出所有内容。您需要从循环内部逐行执行此操作


即使程序正常运行,您仍然会得到“神秘”的输出,因为您将以二进制形式写入一组随机数。如果您希望它们是ASCII文本,则必须使用类似于
fprintf
的内容,而不是
fwrite

,您需要修复这一行:

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

进入这个

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


编辑:正如Joseph所指出的,这不是代码中唯一的问题。

您需要修复这一行:

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

进入这个

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


编辑:正如Joseph指出的,这不是代码中唯一的问题。

您发布的代码没有编译。请复制并粘贴您运行的实际代码。如果矩阵为空,则无需释放矩阵。我编辑了它,因此它现在必须工作。很抱歉,这是第一次。这与您的主要问题无关-请注意,您的清理代码在第二个分配循环中,所有前面的行仍然被分配,矩阵作为一个整体。此外,由于您刚才未能分配
matrix[i]
,因此对
free(matrix[i])
的调用是不可操作的。您需要类似于
for(int j=0;j
-或者,由于您即将退出,您可以决定保留已分配的内存。您发布的代码无法编译。请复制并粘贴您运行的实际代码。如果矩阵为空,则无需释放矩阵。我编辑了它,因此它现在必须工作。很抱歉,这是第一次。这与您的主要问题无关-请注意,您的cle第二个分配循环中的anup代码保留所有先前的行以及整个矩阵。此外,由于您刚刚未能分配
matrix[i]
,因此对
free(matrix[i])
的调用是不可操作的。您需要更像
的东西来获得(int j=0;j
-或者,由于您将要退出,您可以决定保留已分配的内存。这只是许多问题中的一个,修复它不会修复坏的输出。这只是许多问题中的一个,修复它不会修复坏的输出。