我正在尝试读写二进制文件。我在 ram 中创建一个数组,然后将其写入二进制文件。
void escribirMatrizParcialmente(double ***A){
FILE *destino;
int i,j;
if((destino=fopen(ARCHIVOMATRIZ,"wb"))==NULL){
printf("No se pudo abrir el archivo.");
return;
}
for(i=0;i<FILAS;i++){
fwrite( &A[i][0],sizeof(double),COLUMNAS,destino);
//escribo desde el primer elemento de cada fila la cantidad de
//columnas
}
fclose(destino);
}
ARCHIVOMATRIZ
,FILAS
并且COLUMNAS
它们是恒定的。
那么这给了我默认的分割错误。
创建数组时没有错误,因为我在写入之前将它显示在屏幕上,如果我使用 fprintf 写入文本文件,它工作正常。使用下面的代码,我将矩阵正确写入文本文件(我只是为了说明并表明我的问题出在 fwrite 上)。
for(i=0;i<FILAS;i++){
for(j=0;j<COLUMNAS;j++){
fprintf(destino,"%.6lf ",(*A)[i][j]);
}
fprintf(destino,"%s","\n");
}
好吧,我在读取数组时也遇到fread
了问题,其代码与编写代码非常相似。它不会给出编译错误或警告,但是当我显示数组时,它不会显示任何内容。
int i;
for(i=0;i<FILAS;i++){
fread( &A[i][0] ,sizeof(double), COLUMNAS, fuente );
}
我从数组中读取所有行并将它们从每行的起始内存地址存储在我的数组中。
A
是一个三元指针,那么在这个语句中:您正在写入内存位置而不是值。
您说您使用矩阵,即使用二维数组...这是使用双精度数组建模的,正如我所提到的,这里您使用的是三重指针。在这种情况下声明三重指针只有在函数必须为数组分配内存......或释放它时才有意义。在任何其他情况下,为清楚起见,建议使用双指针:
对于其他问题,您缺乏信息,因此其余的答案将不得不等待。