Memset一个对象

时间:2012-02-04 13:42:02

标签: c++

#include <iostream>
#include <string.h>
using namespace std;

class A
   {
     private:
  int a;
  int b;
  public:
  A():a(10),b(20){};
  A(int ad,int bd):a(ad),b(bd){};
  void printvalues()
  {
        cout<<a << " " <<b<<endl;
  }
};

int main()
{

  A a(5,12);

  memset(&a,sizeof(A),0);
  a.printvalues();

  return 0;
}

将对象设置为0,似乎对对象没有任何影响。任何人都可以帮助我理解这种行为。 输出: 5 12

4 个答案:

答案 0 :(得分:9)

你有memset的参数是错误的。它是memset(addr, value, number)

<小时/> 注意:在C ++中,通常会避免使用memset

答案 1 :(得分:5)

你的memset错了:

void * memset ( void * ptr, int value, size_t num );

它应该是:

memset(&a,0,sizeof(A));

在您的示例中,您将0字节a设置为sizeof(A),因此,显然没有变化。

答案 2 :(得分:2)

memset的正确语法是memset(&a,0,sizeof(A)),因为第一个参数是数组或变量,第二个参数是值,第三个参数是字节数。

有关memset访问http://www.cplusplus.com/reference/clibrary/cstring/memset/的详细信息。

答案 3 :(得分:1)

您错误地将参数设置为memset。起初我觉得这太棒了! 写下:memset(&a,0,sizeof(A));

一切都会如预期的那样。