写了一个结构体,假设名字叫abc,然后,在一个方法体中,用了一个memcpy(&abc + 1, def, strlen(def)),于是乎,在方法体运行到最后时,蹦出一个stack   around   the   variable   abc was   corrupted.
请教各位大侠,问题应该是由于&abc+1后面添加了些内容导致abc被破坏的吧?那应该怎么做才能避免abc被破坏呢?

解决方案 »

  1.   

    memcpy(&abc, def, strlen(abc));
      

  2.   

    不好意思,重来:memcpy(&abc, def, sizeof(abc));
      

  3.   

    啊?这样岂不是abc的内容直接被废了呀?
      

  4.   

    首先,为什么要memcpy(&abc + 1, def, strlen(def))捏,意义何在?
    如果非要如此
    void func()
    {
        abc obarray[2];
        memcpy(&abc + 1, def, strlen(def));
    }
      

  5.   

    这个其实会出现问题,
    1)结构体中不能还有指针,如果还有指针,则百分之百不能这样拷贝,这样拷贝肯定会有问题。
    2)可能不能用 strlen(abc)来求值,这个主要是跟编译器的设置有关系,在以前的很多帖子中都有关于结构体求值得问题,这主要是和内存的对齐方式有关系。碰到这种问题,老实的办法,就是分别为结构体中的各个元素分别赋值。