如何在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
-或者,由于您将要退出,您可以决定保留已分配的内存。这只是许多问题中的一个,修复它不会修复坏的输出。这只是许多问题中的一个,修复它不会修复坏的输出。