关于fread读文件会多读一部分内容出来,请帮忙看一下,谢谢

yifuzhiming 2013-05-08 10:24:40
这里读到ctemp里面的内容后面会多出一部分出来,不知道为什么 ,但是在数据量比较少的时候是正常的,谢谢了


int filesize = getFileSize(filepath);
FILE *stream = fopen(filepath.c_str(), "r");
char *ctemp = new char[filesize];
memset(ctemp,0,filesize);
fread(ctemp, filesize, 1, stream);



...全文
277 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzp12 2013-06-11
  • 打赏
  • 举报
回复
我按照上面讲的方法,好像有问题。 帮忙看一下,最后在释放pBuff时会crash,why?

#include "stdio.h"
#include <iostream>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
using namespace std;

int main()
{
		FILE* fpUpload = NULL;
		if (NULL == (fpUpload = fopen("update", "r"))) {
				printf("errno=%d \n", errno);
		}
		fseek(fpUpload, 0, SEEK_END);
		int64_t size = ftell(fpUpload);
		fseek(fpUpload, 0, SEEK_SET);
		char* pBuff = new char(size+1);
		if (NULL == pBuff) {
			printf("error \n");
		}

		memset(pBuff, 0, size+1);
		int readsize = fread(pBuff, 1, size, fpUpload);
        // pBuff[size] = '\n'; 
		delete pBuff;
}
yifuzhiming 2013-05-09
  • 打赏
  • 举报
回复
好像是大面积的错误,我用readFile解决了,这个C语言的函数还是太原始了,用不太习惯
勉励前行 2013-05-09
  • 打赏
  • 举报
回复
char *ctemp = new char[filesize+1];//多申请一个字节,用于放字节串结束符。 //memset(ctemp,0,filesize); //没必要的操作。 size_t size = fread(ctemp, filesize, 1, stream);//返回读取的字节数,最多filesize字节 ctemp[size] = 0 ; //放置字符串结束符。
ccrun.com 2013-05-08
  • 打赏
  • 举报
回复
缓冲的大小,再多一个字节,保存作为字符串结束的0x0.
星際訪客 2013-05-08
  • 打赏
  • 举报
回复
好久沒碰文件檔案操作了~ 不過還是給你一個思路...印象中檔案不是以 byte 為總數計量...好像是以區塊為單位吧? 例如一個區塊為 1024 byte 等......
  • 打赏
  • 举报
回复
多读出一个字节做为字符串终止符

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧