int getstringfromfile(FILE *fp) { char temp[40960] = {0}; char ch; int i = 0; int j; while(!feof(fp)) { memset(temp,'\0',sizeof(temp)); fgets(temp,sizeof(temp),fp); j = 0; ch = temp[j]; while(ch != '\0') { des[i++] = ch; j++; ch = temp[j]; } } des[i] = '\0'; return 0; }
当然如果在一些简单文本中运行,是没有问题的。但是在二进制流文件里面读取就会出问题。这是因为,二进制可能也有’\0‘。这样我们没有读取完就结束了。那怎么办呢?
于是,想到一个文件整块读取。函数如下:
int getstringfromfile(FILE *fp) { char *buffer; char ch; int i = 0; long size; size_t result; //obtain file size fseek(fp,0,SEEK_END); size = ftell(fp); rewind(fp); //fsize = size; //size = size -1; fsize = size; //allocate memory to contain the whole file buffer = (char *)malloc(sizeof(char)*size); if(buffer == NULL) { printf("memory error."); exit(0); } result = fread(buffer,1,size,fp); printf("%d,",result); if(result!=size) { printf("reading error."); exit(0); } fclose(fp); while(i < size) { des[i] = buffer[i]; i++; } print(des); free(buffer); return 0; }这样,以文件大小来确定是否读取结束。这样不存在以上的问题。
同时这个函数给我们一个确定文件大小的方法。
fseek(fp,0,SEEK_END); size = ftell(fp);因为之前用第一个函数,出现了很多问题。所以网上看了很多,写了第二个函数。在此记录一下。