Ⅰ c++结构体变量如何清空
struct student stu;
memset(&stu, 0, sizeof(stu));
Ⅱ memset清空结构体变量
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,
块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,
其返回值为指向S的指针。
需要的头文件
<memory.h>
or
<string.h>
函数原型void
*memset(void
*s,
int
ch,
unsigned
n);
程序例#include
<string.h>
#include
<stdio.h>
#include
<memory.h>
memset函数
int
main(void)
{
char
buffer[]
=
"Hello
world/n";
printf("Buffer
before
memset:
%s/n",
buffer);
memset(buffer,
'*',
strlen(buffer)
);
printf("Buffer
after
memset:
%s/n",
buffer);
return
0;
}
输出结果:
Buffer
before
memset:
Hello
world
Buffer
after
memset:
************
编译平台:
Microsoft
Visual
C++
6.0
也不一定就是把内容全部设置为ch指定的ASCII值,而且该处的ch可为int或者其他类型,并不一定要是char类型。例如下面这样:
int
array[5]
=
{1,4,3,5,2};
for(int
i
=
0;
i
<
5;
i++)
cout<<array[i]<<"
";
cout<<endl;
memset(array,0,5*sizeof(int));
for(int
k
=
0;
k
<
5;
k++)
cout<<array[k]<<"
";
cout<<endl;
输出的结果就是:
1
4
3
5
2
0
0
0
0
0
后面的表大小的参数是以字节为单位,所以,对于int或其他的就并不是都乘默认的1(字符型)了。而且不同的机器上int的大小也可能不同,所以最好用sizeof()。
,
要注意的是,memset是对字节进行操作
所以上述程序如果改为
int
array[5]
=
{1,4,3,5,2};
for(int
i
=
0;
i
<
5;
i++)
cout<<array[i]<<"
";
cout<<endl;
memset(array,1,5*sizeof(int));//
注意
这里与上面的程序不同
for(int
k
=
0;
k
<
5;
k++)
cout<<array[k]<<"
";
cout<<endl;
输出的结果就是:
1
4
3
5
2
16843009
16843009
16843009
16843009
16843009
因为memset是以字节为单位就是对array指向的内存的5个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是,就等于16843009,就完成了对一个INT元素的赋值了。
Ⅲ c语言中如何将结构中变量清空
可以利用memset函数对变量进行清空操作。
memset()函数原型是extern void *memset(void *buffer, int c, int count)
buffer:为指针或是数组,
c:是赋给buffer的值,
count:是buffer的长度.
这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer))
Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
例:char a[100];memset(a, ‘/0’, sizeof(a));
memset可以方便的清空一个结构类型的变量或数组。
memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, ‘/0’, sizeof(a));
memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
strcpy就只能拷贝字符串了,它遇到’/0’就结束拷贝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘/0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。
Ⅳ C语言里如何清空结构体内的数据
memset((char*)&test,0,sizeof(test));试试。我是这么做的·。 补充: 或许是for(i=o;i<10;i++)memset((char*)&test[i],0,sizeof(test[i]));//里面的i是你想要清空的那个变量 追问: 能详细讲解一下这两个地方吗(char*)&test \sizeof(test) 回答: 函数原型:memset(void *, int, size_t);(char*)&test 是第一个参数,表示test结构体的首地址&test强制转化为char型的。sizeof(test)是计算test结构体的大小0表示清空。 追问: sizeof()里面的结构体可以用结构体指针代替吗? 回答: 应该不行·。sizeof()括号里是数据类型,所以貌似我上面写错。应该是memset((char*)&test1[i],0,sizeof(test)); 追问: 好像我用指针也通过了,........竟然没报错,而且数据也确实清空了
Ⅳ 请问各位,如何用用memset清空结构体和用memcpy将读取到的数据拷贝给结构体里面的buff。
memset( &StructObj,0,sizeof(StructType));
memcpy(dstbuf,srcbuf,size);
Ⅵ c++怎么清空结构体数组里的数据
你想清空?那就是全部置0哦,比如 stru_data是一个结构体,可以这样:memset(&stru_data, 0, sizeof(stru_data)); Ps:stru_data是一个对象,如果是指针指向的话,上面就不用&,后面就是sizeof(/*里面是结构体的名字*/)
Ⅶ 如何清空结构体的内容
手动把指针和数组都设置为0(NULL)。
Ⅷ 定义了一个结构体,我想把结构体变量里面的内容清空,之后再继续用,怎么办怎么清空
这个很简单啊,memset就可以了。
例如:
struct A
{
int a;
int b;
};
A a;
......
memset(&a, 0, sizeof (A));
就可以继续使用了。
Ⅸ 如何清空结构体数组
对于数组删除,一般就是使用后面数组元素前移的操作,来覆盖前一元素,达到删除的效果。。。。
例如数组a[10],要删除a[5]这个元素,那么只需要把后面的元素前移一位就行了,也就是a[5]=a[6],a[6]=a[7],a[7]=a[8],这样子a[5]这个元素的内容就会被全部抹杀掉了。。。。
不过这里存在一个问题,你一个结构体数组前移的时候,如何判断有多少个元素要前移呢。。。。
所以我的做法是在结构体里面定义一个标示符int flag。。。。
当对这个结构体数组元素赋值时,如a[10].name="KING" 时,那么就是说下标值为10的元素是存在的,赋完值后,来个a[10].flag=1 来标记一下。。。。
这样做的话,我们可以进行这样的删除操作了,如删除下标值为5的元素——
int i=5;
for(int j=i+1;a[j].flag==1;i++,j++)
{
a[i]=a[j];
/* 结构体数组可以直接这样子做,它会自动把a[i]里面的变量等于a[j]里面对应的变量 */
}
a[i].flag=0;
/* 如果你里面原来有10个元素,那么删除了其中一个,那就剩下9个,a[9]那个位置应该为空,一一把里面的元素清空太麻烦,直接把它的标示符flag等于0,就表示该位置为空的 */
Ⅹ 怎么把结构体数组的1个数据清空
其实结构体和类有很大的相似性可在结构体内放置一个存储单元(即你现在这个结构体的数组或是vector),然后重载[]运算符,使lala[6]返回的内容是结构体中的结构体,已即你原来设计的那个结构体,然后设计一个成员函数用于,删除结构体数组中指定的元素。
memcpy(&lala[5], &lala[6], sizeof(struct student));
memset(&lala[6], 0, sizeof(struct student));