我有一个将二进制数据写入文件或stdout
. 但是调用fwrite()
有时会失败,除非我fflush(stderr)
在stderr
尝试fwrite
.
这是正常行为,还是表明存在一些潜在的内存问题?调试很困难,因为一旦我尝试到数据fprint
,“问题”就会消失。stderr
fwrite
stdout
这是该函数的一个非常简化的版本。
int writebinary(FILE *fpout, void *data, long ntowrite) {
long i;
/* lets say we know the input data is double float */
double *p = data;
/* including this test line makes the function work! */
for(i=0; i<ntowrite;i++) fprintf(stderr,"data[%d]=%g\n",i,p[i]);
/* attempt to write data[] as a single block of bytes */
m= fwrite(data,(size_t)(ntowrite*sizeof(double)),1,fpout);
if(m!=1) {
fprintf(stderr,"Write error: %d\n",ferror(fpout));
return(-1);
}
else return(m);
}
任何智慧都值得赞赏:)