《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的函数实现

 

 

 

 

 

 

 

  

posted @ 2019-05-19 10:24  一个不知道干嘛的小萌新  阅读(701)  评论(0编辑  收藏  举报