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¬Æ
这是错误的:
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
。
您需要修复此行:
矩阵=(int **)malloc(行* sizeof(int));
进入此
matrix =(int **)malloc(row * sizeof(int *));
Edit:正如Joseph指出的那样,这不是代码中的唯一问题。