C/C++ memset使用

memeset 作用是将一段内存的数据全部设置为指定值,函数原型为:

void *memset(void *dest,int c,size_t count);

头文件:
  使用时引入<memory.h>头文件
作用:
  将dest指针指向的内存区域的前count个字符设置为c,并返回指向这个存储区的指针。

注意点1:memset按字节初始化内存区域

memset按字节对存储区进行初始化,所以参数c实际有效的只有低八位(即实际只取0~255),如下所示a与b设置为了相同值。

	char a = ' ';
	char b =' ';
	memset(&a,65,1);
	memset(&b,65+256,1);

正因如此,使用memset对int类型数组进行初始化时一般只能赋为0或-1(二进制码全0或全1),因为int类型占四字节,而memset是将内存区域的每一个字节设置为c的低八位。比如以下这种情况,a[0]~a[3]被设置为16843009,即0x01010101,int类型占四字节,每一字节都被设置成了0x01.

	int a[] = {1,2,3};
	memset(a,1,12);
	for(int i=0;i<=2;i++)
		printf("%d ",a[i]);

注意点2:count设置

  • 若使用数组名可以使用sizeof()获取长度
	int a[] = {0,1,2};
	memset(a,1,sizeof(a));
  • 当用数组名作为函数参数时,实际上传递的是一个指针,使用sizeof()只能获得指针变量的大小,32位机为4字节,64位机为8字节。这时应当把数组大小作为参数传递,如以下代码中再64位系统下,只能将a[0]和a[1]设置为-1.
void init(int *a)
{
	memset(a,255,sizeof(a));
}

int main()
{

	int a[] = {0,1,2};
	init(a);
	for(int i=0;i<=2;i++)
		printf("%d ",a[i]);
} 
  • 注意对字符串初始化时可能会覆盖字符串结束符’\0’,导致printf(“s”)不能正确输出。printf(“%s”)会将目标区域的每一个字节按照字符类型输出,直至遇到字符串结束符。C/C++中,使用双引号定义字符串变量会在末尾自动追加结束符。如下所示,会输出8个A和乱码,因为字符串结束符被覆盖掉了。
	char a[] = "abcdefg";
	memset(a,65,8);
	printf("%s",a);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值