坑的描述
用fwrite把数据写入文件,再用fread读取,发现后半部分的数据可能是错的。
原因:原本要写入文件的数据中,有0x0A,如果用的是文本模式打开的文件流,在windows下0x0A会被转换为0x0D和0x0A
其实windows下的git bash每次git add后都有类似的提示,只是一直没太注意:
先说结论
用fread或fwrite的时候,如果是要写入字符,那么打开的文件、读取的文件,用字符模式(w和r)
FILE* fin = fopen(“filename”, “w”);
fread(buf, sizeof(char)*num_elem, 1, fin);
fclose(fin);
FILE *fout = fopen(“filename”, “r”);
fwrite(buf, sizeof(char)*num_elem, 1, fout);
fclose(fout);
如果是要写入非字符的数据,例如float数组、int数组等,则一定要用二进制模式打开文件(wb和rb)(尽管在linux和mac下你的结果也许一直没问题,但是保不准到了windows下会出错):
FILE* fin = fopen(“filename”, “wb”);
fread(buf, sizeof(float)*num_elem, 1, fin);
fclose(fin);
FILE *fout = fopen(“filename”, “rb”);
fwrite(buf, sizeof(float)*num_elem, 1, fout);
fclose(fout);