c语言结构体定义字符串数组,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;
return i;
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c语言结构体定义字符串数组,C语言,结构体中字符串的声明(采用字符指针还是字符数组)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 凌晨刷卡怎么不是秒到?
- 下一篇: c语言编程代码对父母感恩,c语言中编程: