在c语言中,经常要对内存进行操作,里面涉及到很多函数,但是memeset函数的使用有一点需要大家格外注意,这就是我遇到过的一个问题:
函数原型:void * memset(void * s ,int ch ,size_t n);
函数的功能是:将s所指向某一块内存的的前n个字节的内容全部设置为ch指定的ascll值。第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向s的指针,它是对较大的结构体或数组进行清零操作的一种最快方法。
头文件是:<memory.h>或<string.h>
这些解释,在百度里面都可以看见。这里我要强调一些引起大家重视的关键点。
1、基本应用场合:memset函数通常用来对一块已经分配地址的内存进行初始化,并且通常初始化为0或者字符“ ”。
2、需要注意的几点?
(1)memset中的第三个参数一定要使用sizeof操作符,因为每个系统下对类型长度的定义可能不一样。
(2)memeset中的第一个参数一定要是一个已知的,已经被分配的内存的地址,否则会出错。
(3)大家可能比较疑惑,memeset的第一个参数已经有了被初始化空间的首地址,为什么还要返回一个void* 指针去指向这个地址?这种结构在很多函数库里面比较常见,比如字符串操作函数等,都有类似的现象,这里之所以还要返回这个指针为了实现链式编程,所谓链式编程。