免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 746 | 回复: 0
打印 上一主题 下一主题

memset的用法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-11 10:12 |只看该作者 |倒序浏览

.style1 {
FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ff6699
}
.yjx {
BORDER-RIGHT: #A4BAC4 0px solid; BORDER-TOP: #e8f0f1 0px solid; BORDER-LEFT: #A4BAC4 0px solid; BORDER-BOTTOM: #e8f0f1 0px solid
}
  memset的用法
  
将已开辟内存空间 s 的首 n 个字节的值设为值 c
下面是一个例子
#i nclude  
#i nclude  
main(){
    char *s="Golden Global View";
    clrscr();
    memset(s,'G',6);
    printf("%s",s);
    getchar();
    return 0;
} 
memset() 函数常用于内存空间初始化。如:
char str[100];
memset(str,0,100);
memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, '\0', sizeof(a));
如果以这样的方式声明数组
int a[256]={0};
则数组内全部数字自动初始化为0,即一开始数组内所有元素的值为0
如果这样声明
int a[256];
则数组没有初始化,则开始时数组内的数字可以是任意值。
注意不是楼上所说,memset是对每个字节赋值,而int有4字节(32位)
比如这样,memset(a,1,sizeof(a));
则a中的每个元素都被赋值成为2进制数为,00000001000000010000000100000001,的数
转换成10进制就是16843009
所以,一般用memset对数组赋0或-1,赋其他的值就要用循环来实现。
关于NULL,\0:
stdio.h中有这句:
#define NULL 0
NULL在编译时都转换为0了;
\0是ascll码中编号为0的那个字符,也就是(int)(\0)==0;

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的内存地址溢出。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15979/showart_138957.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP