memset库函数(C/C++ memcpy memset 我想问的是这两个函数有什么作用,包括他们的重载函数)

本文目录
C/C++ memcpy memset 我想问的是这两个函数有什么作用,包括他们的重载函数
memset 一般用来数组清零。一般数组因为数据较多,如果重复使用,会残留上次操作的信息。影响程序判断,要对数组清零有很多办法,不过相当一部分人使用这个函数。因为这个函数性能非常好。表意也相当清楚,一般不会有歧义。
memcpy,和 strcpy差不多,不过strcpy要判断\0,就是串是否结束,所以,性能不如memcpy,在一个就是memcpy是内存块拷贝,不受strcpy的字符串限制,也就是说,如果是2进制数据,strcpy就会出现一些意想不到的后果。比如内存中间有\0。
c语言memset初始化结构体问题
1.memset函数的原型void *memset(void *s, char ch, size_t n);
函数的第一个形式参数是指针类型,所以实参因为一个地址,即&a
注意&a与a是不同的.a是结构体变量名,而&a是变量a的地址.
2.另外memset()是一个库函数函数,需要加头文件#include《string.h》
3.正如你所说的全局与主函数内定义变量a是有一点区别
源代码如下:
#include《stdio.h》
#include《string.h》
typedef struct ss
{
int num;
int dir;
}tent;
//tent a;
int main()
{
tent a;
printf("a=%p\n",a); //输出的是变量的地址
printf("&a=%p\n",&a);//注意a与&a的区别
memset(&a,0,sizeof(a));
return 0;
}
主函数内运行结果:
全局变量运行结果:
这个没警告的.
已上在VC6.0下的结果
为嘛第二个没警告,暂时不清楚.但第一个有警告是合理的.
C++程序中memset什么意思呀
库函数memset()是针对字节操作的,其中第二个参数值被赋给第一个参数指向的内存地址开始的每一个字节,因此,这种初始化其实存在局限性,也导致其主要用于清除数组内容等。比如:假设i=0,1,2,...
memset(a,0,sizeof(a)); // 此时a=0x00000000
memset(a,-1,sizeof(a)); // 此时a=0xffffffff
memset(a,0x0f,sizeof(a)); // 此时a=0x0f0f0f0f=252645135
由于500=0x1f4,400=0x190,因此,如果使用
memset(a,0x190,sizeof(a)); // 此时a=0x90909090
所以,初始化过程还是建议使用循环语句来做。
memest 属于哪一个库函数(C++)
需要的头文件
《memory.h》 or 《string.h》
本段
函数原型
void *memset(void *s, int ch, unsigned n);
memset函数详细说明
1。void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
2。例子
main(){
char *s="Golden Global View";
clrscr();
memset(s,’G’,6);//貌似这里有点问题// 单步运行到这里会提示内存访问冲突
printf("%s",s);
getchar();
return 0;
}
【以上例子出现内存访问冲突应该是因为s被当做常量放入程序存储空间,如果修改为
char s="Golden Global View";则没有问题了。】
【应该是没有问题的,字符串指针一样可以,并不是只读内存,可以正常运行】
3。memset() 函数常用于内存空间初始化。如:
char str;
memset(str,0,100);
4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘memset(a, ’\0’, sizeof(a));
memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:
char a;
memcpy(b, a, sizeof(b)); //注意如用sizeof(a),会造成b的内存地址溢出。
strcpy就只能拷贝字符串了,它遇到’\0’就结束拷贝;例:
char a;
strcpy(a,b);
如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。
5.补充:某人的一点心得
memset可以方便的清空一个结构类型的变量或数组。
如:
struct sample_struct
{
char csName;
int iSeq;
int iType;
};

更多文章:
decorate是什么意思(decorate是什么意思中文翻译)
2026年2月15日 15:15
编程python电脑配置(如何在win7下安装Python及配置)
2025年10月11日 19:30
原生activemq使用(如何使用activemq 管理页面)
2025年6月27日 15:45
connection常用属性(在delphi7中,ADOconnection与ADOQuery都是用来干什么的,有什么联系或者区别吗)
2026年3月25日 08:45
split hairs(don’t split hairs 翻译一下,要直译和引申义)
2026年8月23日 00:45
profitable什么意思(be beneficial for和be profitable for的区别)
2026年1月18日 11:45
switch可以连接笔记本吗(请问switch怎么投屏到笔记本上玩 switch投屏笔记本的操作方法 详细的教程,谢谢!)
2026年8月28日 18:45


















