memset()函数原型

void * memset (void * ptr, int value, size_t num);

memset()功能和参数

value填充ptr指针指向的内存块开始的num字节,填充是以字节为单位的,例如int类型是有sizeof(int)=4个字节的。

特别注意,value是以unsighed char格式填充进去的,可以理解为是以ASCII码(即字符)填充进去的,如果想填充数字,非常容易出错。

memset()返回值

返回内存被填充好之后,指向内存区域地址的ptr指针

memset()正确的示范程序

/* memset example */
#include <stdio.h>
#include <string.h>int main ()
{char str[] = "almost every programmer should know memset!";printf("Before:\n");puts(str); memset (str,'-',6);printf("\nAfter memset(str,'-',6):\n");puts (str);return 0;
}

运行结果:

Before:
almost every programmer should know memset!After memset(str,'-',6):
------ every programmer should know memset!--------------------------------
Process exited after 0.1138 seconds with return value 0
请按任意键继续. . .

memset()函数注意事项

前面说过,memset填充的是ASCII码,如果想填充数字来初始化,可能会发生意想不到的错误。

错误的示范程序

#include <iostream.h>
#include <string.h>       # memset在string.h这个库里面
using namespace std
void main()
{int num[8];//memset(num, 1, 32); //用下面这种方式更安全memset(num, 1, sizeof(int)*8);for (int i=0; i<8; i++){cout << num[i] << ' ';}}

按照正常逻辑,应该输出1才对,但是输出的却是:

16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
--------------------------------
Process exited after 0.2827 seconds with return value 0
请按任意键继续. . .

因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1,即一个int变为0X00000001 00000001 00000001 00000001,显然,把这个数化为十进制不会等于1的。

所以,在memset使用时要千万小心,在给char以外的数组赋值时,只能初始化为0或者-1。


参考文章:

memset - C++ Reference
http://www.cplusplus.com/reference/cstring/memset/

c/c++学习系列之memset()函数 - 华丽的双鱼 - 博客园
https://www.cnblogs.com/yhlboke-1992/p/9292877.html

C语言C++中memset()函数使用和注意事项相关推荐

  1. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  2. c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...

  3. 编写一个自己的完全C语言版本的memset函数,并且评价这个实现的性能和可移植性。

    编写一个自己的完全C语言版本的memset函数,并且评价这个实现的性能和可移植性. memset这个函数的作用大致可以理解为将从指针指向的地址开始的指定字节长度的空间全部替换为指定的值.那么我们可以很 ...

  4. 在c语言程序中main函数的位置,在C语言程序中,main函数的位置_________。

    在C语言程序中,main函数的位置_________. 答:可以放在任意位置 一切邪教组织及其活动都是诡秘的.邪恶的.危害社会的.非法的 答:正确 产品可以根据其耐用性和是否有形而分为( ) 答:非耐 ...

  5. 浅谈C++中memset函数的用法

    浅谈C++中memset函数的用法 memset函数的头文件是cstring, 实际上是一个字符串处理函数,但常用于给静态数组(不是new出来的数组)赋特定初值. #include<cstrin ...

  6. java split函数的用法_java中split函数用法以及注意事项

    java中split函数用法以及注意事项 发布时间:2020-04-23 10:28:23 来源:亿速云 阅读:215 作者:小新 本篇文章和大家了解一下java中split函数用法以及注意事项.有一 ...

  7. C/C++中memset()函数

    函数介绍 memset()函数的作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作. void *memset(void *s, int ch, size_t n) ...

  8. c++语言程序中,main()函数必须放在程序开始的部分,C++多选题(附答案)

    计算机二级考试,附答案 多选题题库 C概述 1.[多选题.2005-4]不是C语言程序的基本单位是________. (A). 程序行 (B). 函数 (C). 语句 (D). 字符 2.[多选题.2 ...

  9. C++中memset函数详解

    memset函数定义于<string.h>头文件中. 函数原型: void *memset(void *s,int c,unsigned long n); 函数功能:为指针变量s所指的前n ...

最新文章

  1. 洛谷-题解 P2672 【推销员】
  2. python面试总结
  3. “90后”变“韭零后”,大数据告诉你谁是基民主力军?
  4. f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码
  5. 如何分析request download状态一直处于running的问题
  6. 程序有并发错误?NO WAY!
  7. python xml etree word_使用python格式化插入的元素xml.etree模块,包括新行
  8. 定义函数up(ch),如字符变量ch是小写字母就转换成大写字母并通过up返回,否则字符ch不改变。要求在短小而完全的程序中显示这个程序是怎样被调用的。
  9. 雷赛运动控制卡能不能用c语言_弱电知识之三:跟我学做全彩屏,认识LED全彩屏的模组、控制卡...
  10. 在Power BI Desktop中实施星型架构
  11. AI头发笔刷_笔刷总是不够用?我们整理精选了1000款笔刷给你
  12. 步进电机和伺服电机的区别
  13. python判断图片模糊_用Python进行图像模糊处理和特征提取
  14. window.requestAnimationFrame讲解
  15. 封装获取一个URL地址问号后面传递的参数信息以及哈希值HASH 方法
  16. icarus主题的博客加载太慢
  17. 嵌入式软硬件模块化开发和工具性总结
  18. 手机页面点击电话进入拨号界面---a链接的tel属性
  19. 竣达技术丨机房组态系统综合监控解决方案
  20. 2年Java软件工程师的觉悟

热门文章

  1. resnet18 结构
  2. Linux有问必答:如何在树莓派上安装USB网络摄像头
  3. boost学习之命令行参数解析库program_options
  4. linux运行出现断错误,在linux下代码运行出现段错误,求大神
  5. node+读写文件_Node之父重构的Deno终于发布了,它终究会取代Node吗?
  6. oracle获取日期中日,关于ORACLE ERP中日记帐的借、贷对应的问题
  7. plsql变量参数化_谁说建模一定要会画图?参数化设计让你事半功倍!
  8. 回调函数例子_Linux C - C基础篇八(函数)
  9. mysql 启动 内存_mysql启动内存的疑问
  10. Tablestore Timestream:为海量时序数据存储设计的全新数据模型...