C语⾔,结构体中字符串的声明(采⽤字符指针还是字符数
组)
结构体中,字符串选项是⽤字符数组表⽰好,还是⽤字符指针表⽰好?
typedef struct person{
char *name;
int age;
char sex[6];
};
该结构体中name⽤的是指针⽽不是数组,所以需要给字符串在堆上申请内存然后再赋值;sex字符串⽤的是字符数组,因此可以给其赋值;
⽤字符指针的优势是:字符指针不会限制字符串的⼤⼩。如果⽤字符数组,需要提前决定字符串的长度。
上⾯的结构体中,name的值可以设⽆限长(前提时,要在堆上申请内存),⽽sex的字符串长度不能超过6。
下⾯是结构体对象创建的过程:
man* creat(char *name, int age, char *sex)
{
man *i = malloc(sizeof(man));
i->name = strdup(name);
i->age = age;
i->sex = sex;
return i;
}
strdup()函数会计算出字符串的长度,然后调⽤malloc函数在堆上申请相应的空间,最后把字符串的所有字符复制到堆上。
我们也可以在strdup()函数的基础上,实现⼀个有错误提⽰的strdup()函数
char * safe_strdup(const char *s)
{
char * retval = NULL;
if (!s)
{
debug(LOG_CRIT, "safe_strdup called with NULL which would have crashed strdup. Bailing out");        exit(1);
}
retval = strdup(s);
if (!retval)
{
debug(LOG_CRIT, "Failed to duplicate a string: %s.  Bailing out", strerror(errno));
exit(1);
}
return (retval);
}
对象创建的函数也可以随之做些更改:
man* creat(char *name, int age, char *sex)
{
man *i = malloc(sizeof(man));
i->name = safe_strdup(name);
i->age = age;
i->sex = sex;
molloc函数return i;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。