更详细的解说见百度百科 --> http://baike.baidu.com/view/982208.htm
1. void *memset(void *s,int c,size_t n)
总的作用: 将已开辟内存空间 s 的首 n 个字节的值设为值 c.
2. 例子
- void main()
- {
- char *s="Golden Global View";
- clrscr();
- memset(s,'G',6);
- printf("%s",s);
- getchar();
- return 0;
- }
3.memset() 函数常用于内存空间初始化. 如:
- char str[100];
- memset(str,0,100);
4.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 的内存地址溢出.
5. 补充: 一点心得
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);
- 6.strcpy
原型: extern char *strcpy(char *dest,char *src);
用法:#i nclude
功能: 把 src 所指由 NULL 结束的字符串复制到 dest 所指的数组中.
说明: src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串.
返回指向 dest 的指针.
memcpy http://www.cnblogs.com/heyonggang/p/3394280.html
原型: extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#i nclude
功能: 由 src 所指内存区域复制 count 个字节到 dest 所指内存区域.
说明: src 和 dest 所指内存区域不能重叠, 函数返回指向 dest 的指针.
来源: http://www.bubuko.com/infodetail-2666022.html