通过fseek()可正确获得文件长度,但fread()到char[]时只得到前三个字节
#include<stdio.h>
#include<iostream>
using namespace std;
#pragma warning(disable : 4996)
int main() {
FILE* fp;
int size;
fp = fopen("write.exe", "rb+");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
cout << size << endl;
rewind(fp);
char* data = new char[size];
fread(data, size, 1, fp);
int l = strlen(data);
cout << l << endl;;
cout << data << endl;
return 0;
}
如何完整读取非文本文件内容
int l = strlen(data)
这是错误的。strlen遇到'\0'就计算结束了。它只用来计算字符串长度。
fread的返回值就是数据长度,所以改成
int l = fread(data, size, 1, fp);
cout<<data也是错误代码,非文本文件读取的不是字符串,应该逐个数组元素输出,来个for循环。