C结构体成员初始化memset

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C结构体成员初始化memset相关的知识,希望对你有一定的参考价值。

若一个C的结构体中包含:
typedef struct _STR
int a;
char b[4];
STR;

那我可以用:
STR str;
memset(&str, 0, sizeof(str));对其成员初始化么?换句话说使用这个memset可以设置int类型成员初始值为整数0,设置char型成员初始值为指向ascii=0,即空指针的值?谢谢!
那char类型字节置0,不相当于指向ascii=0的地方?这个不是NUL,空指针?

memset(&str, 0, sizeof(str))对结构体成员进行初始化,是没有问题的,int型会被初始化成0,char型会被初始化成0。
0有多种解释方法,可以是数字0,也可以是字符串结束符号\0,当然,也可以是NULL。

但是,有一个问题,并不是所有的操作系统,所有的编译器都将0当做字符串结束符合和指针的NULL的。你把0当做NULL用,在特定的系统下是没问题的,但可移植性就差了。
参考技术A 初始化没错,不过不是空指针的值,是整个这个结构体变量所占据的内存所有字节都置零了。

memset结构体初始化

memset可以方便的清空一个结构类型的变量或数组。   

如:   struct sample_struct   {   char csName[16];   int iSeq;   int iType;   };   

对于变量   struct sample_strcut stTest;   

一般情况下,清空stTest的方法:   stTest.csName[0]=‘\0‘;   stTest.iSeq=0;   stTest.iType=0;   

用memset就非常方便:   memset(&stTest,0,sizeof(struct sample_struct));   

如果是数组:   struct sample_struct TEST[10];   则   memset(TEST,0,sizeof(struct sample_struct)*10);

http://blog.csdn.net/shagua_nan/article/details/50907473

以上是关于C结构体成员初始化memset的主要内容,如果未能解决你的问题,请参考以下文章

使用 memset 将结构体数组及其成员初始化为零

C语言中,使用一个结构体之前,要用memset把各个位清零???

c语言如何对结构体某一成员初始化

为啥类的对象不可以用memset初始化,而结构体可以?

c语言中怎样通过索引获取结构体成员的值

C语言-结构体