zoukankan      html  css  js  c++  java
  • c/c++学习系列之memset()函数

    memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。 其原型是:void* memset(void *_Dst, int  _Val, size_t _Size)

    _Dst是目标起始地址,_Val是要赋的值,_Size是要赋值的字节数。

     例1:

           char str[9];

           我们用memset给str初始化为“00000000”,用法如下

           memset(str,0,8); 

    注意,memset是逐字节 拷贝的。

     

       例2:

           int num[8];

           我们用memset给str初始化为{1,1,1,1,1,1,1,1},

           memset(num,1,8);//这样是不对的

         一个int是4个字节的,8个int是32个字节,所以首先要赋值的长度就不应该为8而是32。

         因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1,

         即一个int变为0X00000001 00000001 00000001 00000001,显然,把这个数化为十进制不会等于1的。

       

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

      (如果用memset(a,1,20);
    就是对a指向的内存的20个字节进行赋值,每个都用ASCII1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是1000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。)

    #include <memory.h> //我试了一下,C语言这么用,C++还可以用<cstring>  
    #include <stdio.h> 
     void main( void )  
    {  
     char buffer[] = "This is a test of the memset function";  
     printf( "Before: %s
    ", buffer ); 
     memset( buffer, '*', 4 ); 
     printf( "After: %s
    ", buffer ); 
     }  
    输出:  
    Before: This is a test of the memset function  
    After: **** is a test of the memset function  

     

     

     

    未来为我而来,在自己的手中
  • 相关阅读:
    Ruby on rails开发从头来(windows)(二十七) 测试驱动开发
    数据库设计14技巧
    [原]DataReader 处理多个结果集—NextResult的用法
    MsSQL的字段类型
    在C#中把两个DataTable连接起来,相当于Sql的Inner Join方法
    征集佳句SQL导入导出大全
    [转贴]Hello NHibernate
    [转]数据库开发21条军规
    ASP.NET 中的正则表达式
    经典推荐—.NET相关最好东东(全球最新评价)
  • 原文地址:https://www.cnblogs.com/anthow/p/3392233.html
Copyright © 2011-2022 走看看