C fread将值0写入分配的内存,返回大值
我已经为此工作了几个小时,让其他人看了看,但我不明白。要点是我需要读取字节对,使用一个操作组合它们,然后将组合写入一个新文件两次。唯一的问题是,这里的fread函数将值0写入分配给左侧和右侧的内存中C fread将值0写入分配的内存,返回大值,c,file-io,C,File Io,我已经为此工作了几个小时,让其他人看了看,但我不明白。要点是我需要读取字节对,使用一个操作组合它们,然后将组合写入一个新文件两次。唯一的问题是,这里的fread函数将值0写入分配给左侧和右侧的内存中 代码中的一个早期示例,freadheaderbuffer,11*sizeofint,1,inputFile;效果很好,只会导致更多的混乱 您确定正在读取的字节以前是使用等效的fwrite功能写入的吗?源数据的hexdump将大大有助于理解这是否属实。是的,输入文件会有所帮助。还有一些读数后的打印输出
代码中的一个早期示例,freadheaderbuffer,11*sizeofint,1,inputFile;效果很好,只会导致更多的混乱 您确定正在读取的字节以前是使用等效的fwrite功能写入的吗?源数据的hexdump将大大有助于理解这是否属实。是的,输入文件会有所帮助。还有一些读数后的打印输出。什么是inputf和outputf?他们没有分机吗?此外,您还应该在打开文件时检查一些错误,方法是在其中设置一个条件,如->ifinputFile=NULL…我怀疑fread失败-man fread-如果发生错误,或到达文件末尾,返回值为短项计数或零。@DavidC.Rankin:他似乎在检查下面3行中的错误。如果其中一个调用错误,则返回值将不是1。
short * left = malloc(sizeof(short));
short * right = malloc(sizeof(short));
short * combined = malloc(sizeof(short));
FILE * inputFile = fopen(inputf, "r");;
FILE * outputFile = fopen(outputf, "w");;
while(1){
int resultLeft = fread(left, sizeof(short), 1, inputFile);
int resultRight = fread(right, sizeof(short), 1, inputFile);
//if we reached the end of the file, close files and break the loop.
if (resultLeft != 1 || resultRight != 1){
fclose(inputFile);
fclose(outputFile);
break;
}
//*combined = operation;
fwrite(combined, sizeof(short), 1, outputFile);
fwrite(combined, sizeof(short), 1, outputFile);
}