请教为什么memcpy没有成功?
char* buf1 = new char[2000];
char* buf2 = new char[2000];
fread(buf2,2000,1,文件指针);
memcpy(buf1,buf2,100);
printf("%s ",buf1); //什么也没有
printf("%s ",buf2); //能打印出fread进来的数据
为啥memcpy(buf1,buf2,100); 没有从buf2 复制200个字节到buf1?
谢谢
[解决办法]
不会吧?
代码贴出来看看
[解决办法]
memcpy之后,buf1和buf2都移动了,buf1指向的是你还没有拷贝数据的地方,这样打印当然是不对的。
建议另外用char*p记录buf1的起始地址,这样从p可以看到数据的变化,同时还要注意字符串的结束符。
[解决办法]
不会吧?
代码贴出来看看
代码就是这样了
fread(buf2,3000,1,FI);
char *p=buf1,*p2=buf2;
memcpy(p,p2,100);p+=100; p2+=100;
memcpy(p,p2,200);p+=200; p2+=200;
// buf1[0]='\n';buf1++;
//buf1=0;
printf("%s ",buf1);
如果我去掉如下代码
buf1+=100; buf2+=100;
memcpy(buf1,buf2,200);buf1+=200; buf2+=200;
是可以打印buf1的,所以也就我在另外的帖子里说的,指针和字符串是同一个东西
我另外一个帖子里里字符串和指针是两个变量,完全没有问题,只不过用的是栈
没细看代码,再试试看,
[解决办法]
void HexDump(char *buf,int len) {
int i,j,k;
char binstr[80];
for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%04x -",i);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
}
}
...
fread(buf2,3000,1,FI);HexDump(buf2,3000)
memcpy(buf1,buf2,100);HexDump(buf1,100)
buf1+=100; buf2+=100;
memcpy(buf1,buf2,200);HexDump(buf1,200)
buf1+=200; buf2+=200;
...
------解决方案--------------------
兄弟, 你的buf1已经被你向后+100 了,也就是说你复制的东西在buf1-100的地方,你从buf1开始打印当然啥也没有了...