memset初始化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memset初始化相关的知识,希望对你有一定的参考价值。

char str[100];
memset(str, 0, 100);

memset(str, '', 100);
有区别吗

memset(str, 0, 100); 将str[100] 的内容都初始化为0

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初始化的主要内容,如果未能解决你的问题,请参考以下文章

使用 memset 初始化整个数组

零初始化器比 memset 快吗?

memset 初始化数组 & 实现原理

memset初始化

memset 对每个字节进行初始化 (0,-1)

C语言memset问题