关于memcpy和 strcpy的区别 以及memset
2016-06-07 15:21 小竹心语 阅读(1119) 评论(0) 编辑 收藏 举报strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
函数原型:char
*
strcpy
(
char
* dest,
const
char
* src)
// 实现src到dest的复制
函数原型:void *memcpy1(void *desc,const void * src,size_t size)
memcpy1(dest,src,sizeof(src));(这里求长度一定要用sizeof,否则字符串的结束符不会被算进去)
关于memset:
函数原型:void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
void是一个通用类型,使用的时候可以用int、char等等。
memset() 函数常用于内存空间初始化。如:
char str[100];
memset(str,0,100);
看下面的一个例子:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 //int argc , char *argv[] 5 int main() 6 { 7 int arr[10]; 8 9 int i=0; 10 memset(arr , 1 , sizeof(arr)); 11 for( i = 0 ; i < 10 ; i++) 12 printf("arr[i]=%d\n",arr[i]); 13 14 15 return 0; 16 }
看到的结果和想想的不一样,
memset是给每个字节赋1,int有四个字节 即一个int附初值为01010101转为10进制为16843009
这种情况应该用循环实现