1. 首页 > 笙耀百科 >

memset函数用法_c++中memset函数用法

memset函数的用法?

在你申请了一块内存之后,

memset函数用法_c++中memset函数用法memset函数用法_c++中memset函数用法


比如

int *p=NULL;

p=malloc(10*sizeof(int));//申请了10个int型内存

memset(p,0,10*sizeof(int));//全部初始化为0

memset的作用就是把你快连续的内存初始化为你给的值。

Example

/* MEMSET.C: This program uses memset to

* set the first four bytes of buffer to "*".

*/

#include

#include

void main( void )

{char buffer[] = "This is a test of the memset function";

printf( "Before: %s\n", buffer );

memset( buffer, '*', 4 );

printf( "After: %s\n", buffer );

}Output

Before: This is a test of the memset function

After: **** is a test of the memset function

Memset()

出自C语言资料库

函数原型

void *memset(void *dest,int c,site_t n);

函数作用

memset()函数把从开始地址为dest,长度为n的内存区域内的每个字节都设置为c的值,此函数返回dest的值。

声明所在头文件

string.h

memset(a,0,sizeof(a));//调用函数初始化 a[]={0};//数组的初始化其实这个没有啥区别的,你在源码中写上。 a[] = {0}; 不需要再 memset(a,0,sizeof(a)); 拿vc6的编译器来说 a[] = {0}; 本身就相当于: a[]; memset(a,0,sizeof(a)); 你可以自己反汇编代码看一下。那为什么会这样呢? 那是因为初始化是一个顺序点,编译器必须保证 顺序点执行。 所以 a[]={0}; 这样了 就不需要再调用 memset函数了。

因为memset是按字节赋值,sizeof(a) 为4字节(默认你设置的为int数组),当赋值为1时候,每个字节都为00000001,那么4字节32位就为00000001000000010000000100000001(B) 二进制转十进制就是2^0+2^8+2^16+2^24=16843009。

个人理解,有问题还请指出,勿喷!

memset函数用来对一段内存空间全部设置为某个字符,常用于内存空间初始化。将已开辟内存空间

s的首

n个字节的值设为值

c。

下面是一个例子

#include

#include

main(){

char

*s="Golden

Global

View";

clrscr();

memset(s,'G',6);

printf("%s",s);

getchar();

return

0;

}C语言memcpy函数原型:extern

void

*memcpy(void

*dest,

void

*src,

unsigned

int

count);

用法:#include

功能:由src所指内存区域复制count个字节到dest所指内存区域。

说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

举例:

//

memcpy.c

#include

#include

main()

{char

*s="Golden

Global

View";

char

d[20];

clrscr();

memcpy(d,s,strlen(s));

d[strlen(s)]=0;

printf("%s",d);

getchar();

return

0;

}函数

strchr()

功能:

在一个串中查找给定字符的第一个匹配之处\

用法:

char

*strchr(char

*str,

char

c);

程序例:

#include

#include

int

main(void)

{char

string[15];

char

*ptr,

c=

'r';

strcpy(string,

"This

is

astring");

ptr

=strchr(string,

c);

if

(ptr)

printf("The

character

%c

is

at

position:

%d\n",

c,

ptr-string);

else

printf("The

character

was

not

found\n");

return

0;

}

j=0;是一句初始化语句,在int

j;声明变量后变量的值是未知的,所以要在使用前赋初值。

memset(word,0,21);这个函数第一参数是一个指针,指向目标内存的首地址,第二个参数是你要赋给指定内存块中各个字节的值。第三个参数是被操作内存块的字节数。连在一起这个语句的意思是,从word指向的内存地址开始的21个字节的内存,赋成0。其实也是一个初始化操作。

请教高手:memset函数详细讲解?

函数memset()是针对字节操作的,其中第二个参数值被赋给第一个参数指向的内存地址开始的每一个字节,因此,这种初始化其实存在局限性,也导致其主要用于清除数组内容等。比如:假设i=0,1,2,...

memset(a,0,sizeof(a)); // 此时a[i]=0x00000000

memset(a,-1,sizeof(a)); // 此时a[i]=0xffffffff

memset(a,0x0f,sizeof(a)); // 此时a[i]=0x0f0f0f0f=252645135

由于500=0x1f4,400=0x190,因此,如果使用

memset(a,0x190,sizeof(a)); // 此时a[i]=0x90909090

所以,初始化过程还是建议使用循环语句来做。

void *memset(void *s, int ch, size_t n);

为已知大小的一片内存空间存入同一个值。

memset(数组名,用这个值初始化,数组的大小);

c语言中memset是什么意思

memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:

void *memset(void*,int,unsigned);

其中void*表示地址

memset()的第一个实参是数组名,数组名作参数即数组作参数,它仅仅只是一个数组的起始地址而已。

实现第一个memset()函数调用的内存布局见图7-3。 在函数memset()栈区,从返回地址往上依次为第1,2,3个参数。第1个参数中的内容是main()函数中定义的数组ia1的起始地址。第2个参数是给数组设置的值(0),第3个参数是数组的长度(50*2)。函数返回时,main()函数的数组中内容全置为0。

在系统函数void *memset(void *s,int c,size_t n)中,第一个参数是指针,str是数组名,是一串数据的起始地址,类型相同,但str[9]是一个变量,作为该函数实参传递时,必须转换为地址,所以形式是&str[9]。

字符串首地址=第一个字符的地址

所以 str = &str[0]

字符串就是字符数组,既然是数组,那数组名就是数组首元素的地址,即

str = &str[0],str+1 = &str[1]; &str[9] = str + 9;

懂了吧

海峡[9]代表的价值和取地址符&STR [9]海峡[9]的位置。

str是第一个元素的地址。

&str是整个数组的地址。

这两个值吗?是相等的。但含义是不一样的

str[9]代表的是数值,& 取地址符,&str[9]就是str[9]的位置。

str是首元素的地址。

&str是整个数组的地址。

两者数值相等。但是意义不一样的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息