在C ++中初始化struct中的char *

时间:2014-07-14 16:26:23

标签: c++ struct

我有一个结构如下:

struct temp 
{
    char* person;
    char* address;
    int id;
    int phone;
}

我有一个结构变量

temp var;

我希望在构造函数中初始化结构的成员,如:

 Data ( )
{
    var -> person = {};
    var -> address = {};
    var.id = 0;
    var.phone = 0;
 .............. 
}

人和地址是字符数组。

我不确定这是否是在C ++中初始化它们的正确方法。有什么建议吗?

4 个答案:

答案 0 :(得分:3)

C ++中的正确​​方法是使用std::string代替char*

struct temp 
{
    std::string person;
    std::string address;
    int id;
    int phone;
}

此更改将确保自动管理字符串的资源。

如果必须使用C字符串作为学习练习的一部分,并且希望将它们初始化为空字符串(而不是NULL指针),则可以使用运算符new[],如这样:

Data ( )
{
    var -> person = new char[1];
    var -> person[0] = 0;
    var -> address = new char[1];
    var -> address[0] = 0;
    var.id = 0;
    var.phone = 0;
}

如果你采用这种方法,你需要添加代码,一旦完成var,就会取消分配内存,例如:

delete[] var -> person;
delete[] var -> address;

答案 1 :(得分:2)

如果要将指针字段设置为NULL(或C ++ 11中的nullptr),请尝试

 var -> person = NULL;

如果要将其设置为文字常量字符串,请尝试类似

的内容
 var -> person = "John Doe";

(如Paul R所述,将其设为std::string

更好的是,让你的struct temp成为真实的class,以便为它提供构造函数和析构函数。阅读Rule of three(在C ++ 11中,它正在成为五个规则)。

答案 2 :(得分:1)

我只是将它们设置为NULL。 在旁注,我无法帮助,但注意到你有var->和变种混合。如果你创建一个对象,它是[。]如果你引用一个指向基础对象的指针它是[ - >]。

typedef struct TTEMP 
{
    char* person;
    char* address;
    int id;
    int phone;
}TTemp;

Data ( )
{
    TTemp var;
    var.person = NULL;
    var.address = NULL;
    var.id = 0;
    var.phone = 0;
    .............. 
}

答案 3 :(得分:1)

C ++中的struct(几乎)与类相同,但默认情况下所有成员都是公共的。 您也可以在构造函数中初始化。

struct temp 
{
    char* person;
    char* address;
    int id;
    int phone;
    temp():person(0),address(0),id(0),phone(0){}
}

temp t; // initialized!

如果由于某些原因你不想拥有构造函数,请创建一个工厂函数,它将封装成员的初始化并仅在那里创建实例。这实际上是C模仿构造函数的方式。

temp* create_my_temp()
{
  temp *t;
  //create using malloc or new
  //initialize t;
  return t;
}