首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问为什么memcpy没有成功

2013-10-19 
请教为什么memcpy没有成功?char* buf1 new char[2000]char* buf2 new char[2000]fread(buf2,2000,1,

请教为什么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可以看到数据的变化,同时还要注意字符串的结束符。

引用:
Quote: 引用:

不会吧?
代码贴出来看看

代码就是这样了
fread(buf2,3000,1,FI);
      memcpy(buf1,buf2,100);buf1+=100; buf2+=100;
      memcpy(buf1,buf2,200);buf1+=200; buf2+=200;
     // buf1[0]='\n';buf1++;
//buf1=0;
printf("%s ",buf1);

如果我去掉如下代码
buf1+=100; buf2+=100;
      memcpy(buf1,buf2,200);buf1+=200; buf2+=200;
是可以打印buf1的,所以也就我在另外的帖子里说的,指针和字符串是同一个东西
我另外一个帖子里里字符串和指针是两个变量,完全没有问题,只不过用的是栈

[解决办法]
引用:
Quote: 引用:

不会吧?
代码贴出来看看

代码就是这样了
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开始打印当然啥也没有了...

热点排行