char buffer1[1000]
char *buffer2
buffer1读取了一个二进制文件(大概1000字节不到)(文件中有0X00,以及0XFF)buffer2=buffer1;
每当我把buffer1的字符存到buffer2中时,字符显示总是不完整(只能存放200字节),读到0x00或者0xFF就结束了。我应该怎么办呢?

解决方案 »

  1.   

    或许用MFC中的什么类可以解决这种问题吗?
      

  2.   

    buffer2=buffer1; 
    这一句有问题吗?
      

  3.   

    MS 推荐使用 StringCchCopyN 和 StringCcbCopyN,更安全。
      

  4.   

    我应该怎么办呢?
    --
    没办法,显示不了,但数据还在啊
    C字符串是以0xFF为结束符的
      

  5.   

    或者
    for(int i=0;i<1000;i++)
    *(buffer2+i)=buffer1[i];
      

  6.   

    memcpy  str*** 函数以遇见\0就认为字符串已经结束了
      

  7.   

    memcpy,字符串是以0结尾的,读到了0它就以为字符串结束了!
      

  8.   

    字符串是以"0x00"为结束符的,所有的字符串操作,在遇到0x00的时候,都会截断。不过数据仍然在对应的内存区域中。
    在0x00之后的数据,你可以直接用buffer1[202]之类的访问,只是不能用字符串操作。
      

  9.   

    用memcpy来复制,你用任何基于C语言风格的函数来做,都是以'\0'来结束的。你只要是获取了指针,强制复制N个字节(这需要从你读取的时候的字节数来计数)过去。就会在另外一块内存中有相同的数据,不管是0x00,还是0xff。
    我觉得最直观的调试方法,就是打开内存调试。可以直观的观察到内存数据的变化
      

  10.   

    2#, 10# 方法都可以 更支持2# memcpy()
      

  11.   

    同4f,你最好用十六进制来显示。可以自己写个char -> 十六进制转换函数。或者直接用debug alt+6,把buffer2的地址输入进去看看
      

  12.   

    char buffer1[1000] 这个是放在栈里面的
    char *buffer2   这个事放在全局变量里面的,也就是没有赋值之前,它是没有指向内存区域的
    你用这句buffer2=buffer1; 肯定是有问题 再定义一个数组,用这个语句就可以了
      

  13.   

    我感觉用strcpy_s   应该可以,中间的参数用数据的长度
      

  14.   

    还有看看是不是栈内存不足,一般栈只有1M或者2M左右大小,超过就不行了你把buffer[1000]  换成buffer[500*2]试试,如果这样可以复制,那就是栈空间不足的问题