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,空指针?
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的主要内容,如果未能解决你的问题,请参考以下文章