关于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);



...全文
168 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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语言的函数还是太原始了,用不太习惯
回复
PPower 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 等......
回复
多读出一个字节做为字符串终止符
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2013-05-08 10:24
社区公告
暂无公告