我想读取超过1GB(其中有1,157,421,364字节)的文件,它会在使用fread()函数时给出内存错误,但当我使用fgets()函数时效果很好。 注:我混合了C和C++ ..如何克服读取大文件(超过1GB)时的内存错误 - C/C++
有人可以帮助我克服这个内存错误,我做错了什么?
在此先感谢...
错误是“内存错误”
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <cstring>
void read_file2(FILE* readFilePtr){
long file_size;
fseek(readFilePtr, 0L, SEEK_END);
file_size = ftell(readFilePtr);
rewind(readFilePtr);
char *buffer;
buffer = (char*) malloc (sizeof(char)*file_size);
if (buffer == NULL) {
fputs("Memory Error", stderr);
exit(2);
}
long lines = 0;
if (fread(buffer, 1, file_size, readFilePtr) != file_size){
fputs("Reading Error", stderr);
exit(1);
}
char *p = buffer;
while (p = (char*) memchr(p, '\n', (buffer + file_size) - p)){
++p;
++lines;
}
printf("Num of lines %ld\n", lines);
free(buffer);
}
int main(int argc, char** argv){
clock_t begin_time, end_time;
float time_consumed;
begin_time = clock();
FILE* inputFilePtr = fopen(argv[1], "rb");
if(inputFilePtr == NULL){
printf("Error Opening %s: %s (%u)\n", argv[1], strerror(errno), errno);
return 1;
}
read_file2(inputFilePtr);
end_time = clock();
time_consumed = ((float)end_time - (float)begin_time)/CLOCKS_PER_SEC;
printf("Time consumed is -- %f\n", time_consumed);
return 0;
}
什么是错误? –
更新...它给“内存错误” – rda3mon
不,我们需要错误的确切消息。但实际上这几乎足以证明不需要错误,所以请尝试下面的一些解决方案。 –