• 《C库 — memset函数的用法》


    1.memset函数原型

      总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。(注意:会去修改内存得值,如果内存是只读,使用memset会出错

      重点需要注意一个细节:memset是以byte来填充的,也就是一个字节(8bit)一个单位来填充。

      因此:如果int array[10]; memset(array, 1, 10);然后再把array的值打印出来,会得到一个错误的值。因为int是4个字节,因此再int类型中1的表现形式为“00000000000000000000000000000001”,然后将这32位填充1个byte中,高位被舍弃,也就是“00000001”,然后再填充一次就变成“0000000100000001”。那么array[0]其实在内存中存储的就是“00000001000000010000000100000001”。

    2.示例

    例1:memset是以字节为单位进行填充的 

     

      通过以上简单得例程,编译运行后理论上我们想要得得到得结果是array[0] = 1。

      实际上:

      

      将int array[10];

      修改成:

      char array[10];

      

       结果就是我们想要得。

     例2:memset会去修改内存中的值,去修改只读内存会造成段错误

      

      运行结果:

      

      因为char *s = “zhuangquan”是字符指针指向字符串常量。

      C语言中定义为常量的值,是不允许被修改的,这是一个规则。如果有修改需求,就不要定义为常量,而是定义为变量。

      在运行时,常量字符串会被存储在静态存储区,这段空间的特性就是只读的,任何修改属操作,均会引起整个程序崩溃。这也是C语言保证常量不可修改的一个手段。

      (用const int i定义出来的也是常量,define定义的也是常量。包括‘A’以及ASCII表里面的以及0x01这些都是常量。都属于只读)

       将*s修改成s[]就可以了

      

       运行结果:

      

     3.memset的函数实现

      

  • 相关阅读:
    关联容器:unordered_map详细介绍
    c++类成员变量初始化相关问题
    全方位深入理解JavaScript面向对象
    彻底搞懂 JS 中 this 机制
    IDEA 服务器热部署详解(On Update action/On frame deactivation)
    Java书籍推荐
    JSTL
    谭浩强的书中的一些知识点(1)
    EL表达式
    第一章第二章
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/10888347.html
Copyright © 2020-2023  润新知