• memset的用法


    1. void *memset(void *s, ch, size n); //将指针s所指向的内存的前n个字节置为ch

    #include "stdafx.h"
    #include <iostream>
    #include <stdio.h>
    #include <cstring>
    using namespace std;
    
    void char_memset()
    {
        char a[5];
        memset(a,'1',sizeof(char)*5);
        cout<<"function char_memset:"<<endl;
        for(int i=0;i<5;i++)
            cout<<a[i]<<"	";
        cout<<endl;
    }
    
    void int_memset()
    {
        int a[5];
        memset(a,1,20);
        //memset(a,1,sizeof(int)*5);
        //memset(a,1,sizeof(a));
        cout<<"function int_memset:"<<endl;
        for(int i=0;i<5;i++)
            cout<<a[i]<<endl;
    }
    
    int main(int argc, _TCHAR* argv[])
    {
        char_memset();
        int_memset();
        system("pause");
        return 0;
    }

    因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。

    而第二个程序a是整型的,使用 memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。

    运行结果如下:

    注意:int_memset()函数中,这三句是等效的,注释掉的两句和memset(a,1,sizeof(a)),都是20字节的空间。

    void int_memset()
    {
        int a[5];
        //memset(a,1,20);
        //memset(a,1,sizeof(int)*5);
        memset(a,1,sizeof(a));
        cout<<"function int_memset:"<<endl;
        for(int i=0;i<5;i++)
            cout<<a[i]<<endl;
    }
    void char_memset()
    {
        unsigned char a[5];
        memset(a,1,sizeof(char)*5);
        cout<<"function char_memset:"<<endl;
        for(int i=0;i<5;i++)
            cout<<(int)a[i]<<"	";
        cout<<endl;
    }

     2. 用memset进行内存清零是没有问题的,即使它是按字节进行操作,如上面代码中:

    void int_memset()
    {
        int a[5];    
        memset(a,0,sizeof(int)*5);
        cout<<"function int_memset:"<<endl;
        for(int i=0;i<5;i++)
            cout<<a[i]<<endl;
    }

     3. memset() 函数常用于内存空间初始化。

    char str[20];
    memset(str,0,20);

     4.  方便清空一个数组或者结构类型的变量。

    typedef struct stu
    {
        char name[20];
        int age;
        int id;
    }STU;
    
    STU student_a;
    STU stu[10];
    
    memset(&student_a,0,sizeof(STU));
    memset(&stu,0,10*sizeof(STU));
  • 相关阅读:
    www.verycd.com
    HDU-5281
    HDU-5280
    UVALive 6426
    hihocoder 1178 : 计数
    hihocoder 1177 : 顺子
    HDU-5272
    Tomcat 部署项目的三种方法
    Oracle数据库PLSQL的中文乱码显示全是问号
    ORACLE的sign函数和DECODE函数
  • 原文地址:https://www.cnblogs.com/dongyanxia1000/p/5076209.html
Copyright © 2020-2023  润新知