C语言 memset 函数

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.memset 函数简介

memset 函数是计算机中 C / C++ 语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。

#include <string.h>

/*
*描述:初始化内存
*
*参数:
*   [IN] str:指向要填充的内存块
*   [IN] c:要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
*   [IN] n:要被设置为该值的字符数。
*
*   返回值:该函数不返回任何值。
*/
void *memset(void *str, int c, unsigned long n);

二.memset函数实战

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 memset 函数
//@Time:2021/11/20 09:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/ 


#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str[50] = {0};
 
   strcpy(str,"www.codersrc.com");
   puts(str);
 
  //将字符串的前面7个字符初始化为 t
   memset(str,'t',7);
   puts(str);
   
   return(0);
}

/*
www.codersrc.com
tttttttersrc.com
*/

三.memset函数妙用

定义变量时一定要进行初始化,尤其是数组和结构体 struct 这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生 “烫烫烫烫烫烫” 这样的野值,俗称“乱码”。

#include <stdio.h>
#include <string.h>
 
typedef struct student
{
    int age;
    char name[1024];
    float scroe;
}student;

int main ()
{
    printf("\n声明变量不初始化---------------\n");
    for(int i = 0; i<5 ; i++)
    {
        student s ;
        printf("age = %d name = %s scroe = %f \n",s.age,s.name,s.scroe);
   }
	
   printf("\n声明变量使用memset初始化---------\n");
   
   for(int i = 0; i<5 ; i++)
   {
        student s ;
        memset(&s,0,sizeof(student));
        printf("age = %d name = %s scroe = %f \n",s.age,s.name,s.scroe);
   }
 
   return(0);
}

/*
声明变量不初始化---------------
age = 1 name =  scroe = 0.000000 
age = 1 name =  scroe = 0.000000 
age = 1 name =  scroe = 0.000000 
age = 1 name =  scroe = 0.000000 
age = 1 name =  scroe = 0.000000 

声明变量使用memset初始化---------
age = 0 name =  scroe = 0.000000 
age = 0 name =  scroe = 0.000000 
age = 0 name =  scroe = 0.000000 
age = 0 name =  scroe = 0.000000 
age = 0 name =  scroe = 0.000000 
*/

重上面可以看出,声明结构体变量,没有使用 memset 初始化时候,结构体 struct 成员变量的值有可能会出现随机数;而使用了 memset 初始化之后可以在程序中规避这样的错误发生!


四.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数参数 main(int argc, char *argv[])
  22. C语言 全局变量和局部变量区别
  23. C语言 static
  24. C语言 extern
  25. C/C++ Unicode 和多字节区别
  26. C/C++ wprintf 输出中文乱码
  27. C/C++ char 和 wchar_t 相互转换
  28. C/C++ NaN(Not a Number)
  29. C语言 结构体struct简介(一)
  30. C语言 结构体struct定义和使用(二)
  31. C语言 结构体struct数组(三)
  32. C语言 结构体struct指针(四)
  33. C语言 结构体struct成员函数(五)
  34. C语言 结构体struct嵌套(六)
  35. C语言 结构体struct值传递和址传递(七)
  36. C语言 malloc 函数
  37. C语言 free 函数
  38. C语言 memset 函数

未经允许不得转载:猿说编程 » C语言 memset 函数
喜欢(0) 打赏

评论抢沙发

评论前必须登录!

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏