读书人

请教在用fwrite的时候为什么每一个字符

发布时间: 2013-01-28 11:49:56 作者: rapoo

请问在用fwrite的时候为什么每一个字符后面都接了一个空格?
#include "widget.h"

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
file();
}

Widget::~Widget()
{

}

int readfile(FILE *fp,char *buff,int len,int n)
{
if((fp=fopen("E:\\image.003","rb"))==NULL)
{
printf("Cannot read file\n");
}
else
{
fseek(fp,n*BUF_SIZE,SEEK_SET);
len = fread(buff,1,1024*1024,fp);
}
return len;
}

int writefile(FILE *fp1,char *ab,char*buff,int len,int m)
{

if((fp1=fopen(ab,"a+"))==NULL)
{
printf("Cannot write file\n");
}
else
{
fwrite(buff,1,len,fp1);
}

fclose(fp1);
}

int name(int m,char *ab)
{
char *ac="E:\\vm\\";
char *b="name.";
int n=m;
sprintf(ab,"%s%s%03d",ac,b,n);
qDebug()<<ab;
}

int Widget::file()
{
int num = 1;
int n = 1;
int m = 0;
char ab[1024];
//char buff[1024*1024];

char *buff;
buff=(char*)malloc(BUF_SIZE*10);
int size = BUF_SIZE*10;
qDebug()<<"len";
FILE *fp;
FILE *fp1;
int len = 0;

if((fp=fopen("E:\\image.003","rb"))==NULL)
{
printf("Cannot read file\n");
}
// while (1)
// while (feof(fp) == 0)
// {
// while (n <= 10)
// {
fseek(fp,m*size,SEEK_SET);
len = fread(buff,1,size,fp);
qDebug()<<buff;

// 512 * 512 = 56k
if (feof(fp) != 0)
{


//break;
}
else
{
name(num,ab);
num++;
n=1;
}
// len = readfile(fp,buff,len,m);
len = size;
writefile(fp1,ab,buff,len,m);
m++;
memset(buff,0,sizeof(buff));
n++;
// }

// }

free(buff);
return 0;
}

[解决办法]
FILE *fp1;
writefile(fp1,ab,buff,len,m);

fp1没有赋值。
[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

[解决办法]
你用的事C风格的字符串,C风格的字符串是以空格结束的

读书人网 >C++

热点推荐