memset初始化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memset初始化相关的知识,希望对你有一定的参考价值。
char str[100];
memset(str, 0, 100);
和
memset(str, '', 100);
有区别吗
memset(str, '', 100); 中 的 '' 是个非法的存在编译是通不过的 ‘a’ 表示一个字符, 但 '' 代表什么呢 非法
可以这样写 memset(str, '\0', 100); '\0' 在内存中的值为0
这样 memset(str, '\0', 100); 与 memset(str, 0, 100); 等价 参考技术A 有的一个用整型值0初始化,一个用空字符初始化。追问
在一定程度上,我们可以说这两者没有区别,是吧
memset函数
前段时间学习了malloc函数和calloc函数,两个函数最大的区别就是malloc在申请完空间之后并不会对其进行初始化,那么就没有手动初始化的方法了么?接下来就学习一下memset函数
memset函数:
- 函数原型:void* memset(void *s , int ch , size_t n);
- 函数说明:将指针s所指向的内存空间的前n个字节的内容全部设置为ch指定的ASCII码,s为需要被初始化的内存地址,块的大小由第三个参数指定,该函数通常为新申请的内存做初始化工作
- 返回值:返回值为指向s的指针
- 头文件:<string.h>或者<memory.h>
- 一般应用:
- 通常用来对一块已经分配地址的内存进行初始化,并且通常初始化为0或者字符‘\0‘,举例说明
1 //1,对字符数组进行初始化 2 int main(){ 3 char buf[10];//创建一个字符数组 4 memset(buf,‘0‘,sizeof(char)*10);//将buf指向的空间的前10个字节初始化为字符‘\0‘ 5 for(int i = 0;i < 10;i++){ 6 cout << buf[i] << endl; 7 } 8 cout << endl; 9 return 0; 10 } 11 //结果应该是10个0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0
- 对使用malloc函数申请的内存空间进行初始化
1 int main(){ 2 char *ptr = (char*) malloc(sizeof(char)*10); 3 if(ptr != NULL){ 4 memset(ptr,‘0‘,sizeof(char)*10); 5 for(int i=0;i<10;i++){ 6 cout << ptr[i] << endl; 7 } 8 free[ptr]; 9 ptr = NULL; 10 11 return 0; 12 }//结果和上面的一样,是10个0
- 对整型数组进行初始化
1 int main(){ 2 int in[10]; 3 memset(in,0,sizeof(int)*10); 4 for(int i=0;i<10;i++){ 5 cout << in[i] << endl; 6 } 7 return 0; 8 }
以上是关于memset初始化的主要内容,如果未能解决你的问题,请参考以下文章