精华内容
下载资源
问答
  • memset函数用法

    2019-04-03 14:28:40
    memset函数用法 头文件: <string.h> 函数定义: void *memset(void *s, int x, size_t n); 函数解释: 从指针s指向的内存位置开始,其后的n个字节的值设为整型数字x 如: char s[6]={'a','b','c...

    memset函数用法

    • 头文件
      <string.h>
    • 函数定义
      void *memset(void *s, int x, size_t n);
    • 函数解释
      指针s指向的内存位置开始,将物理内存中的后n个字节(包括s指针指向的那一字节)的值设为整型数字x

    如:

    	char s[6]={'a','b','c','d','e','\0'};//声明一个长度为6的char类型数组s并初始化为a b c d e \0
    	
    	memset(s,71,4);//用memset函数对s数组的前4个字节赋值为71
    	
    	printf("%s",s);//打印输出这个s字符串
    

    结果为:GGGGe
    图示如下:
    memset函数char类型

    • 注意内存中类型与字节的关系:
      char类型是1个字节表达一个char,而int类型是4个字节表达一个int

    如:

    int s[2] = {16975631,16975631};//声明一个长度为2的int类型数组s并初始为16975631,16975631
    
    memset(s,1,5);//用memset函数将s数组的前5个字节赋值为1
    
    printf("%d,%d",s[0],s[1]);//打印输出s数组的这2个元素
    

    结果为:16843009,16975617
    图示如下:
    在这里插入图片描述

    以上主要是涉及了:内存的存储方式,大小端存储问题,int类型的二进制码(正数原码存储,负数补码存储)比较复杂。

    • 常用数组初始化:

    1.int数组 初始化为 0

    int arr[100];
    memset(arr,0,sizeof(arr));
    

    2.char数组 初始化为 \0

    char str[100];
    memset(str,'\0',sizeof(str));
    
    展开全文
  • 主要介绍了C++中memset函数用法,结合实例形式详细分析了memset函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
  • memset 函数用法

    千次阅读 2010-02-01 00:31:00
    用法:#include 功能:把buffer所指内存区域的前count个字节设置成字符c。说明:返回指向buffer的指针。用来对一段内存空间全部设置为某个字符。举例:char a[100];memset(a, /0, sizeof(a));memset可以方便的清

    memset
    原型:extern void *memset(void *buffer, int c, int count);
    用法:#include <string.h>
    功能:把buffer所指内存区域的前count个字节设置成字符c。
    说明:返回指向buffer的指针。用来对一段内存空间全部设置为某个字符

    举例:char a[100];memset(a, '/0', sizeof(a));

    memset可以方便的清空一个结构类型的变量或数组

    如:
    struct sample_struct
    {
    char   csName[16];
    int   iSeq;
    int   iType;
    };

    对于变量
    struct sample_strcut stTest;

    一般情况下,清空stTest的方法:
    stTest.csName[0]='/0';
    stTest.iSeq=0;
    stTest.iType=0;
    上面是清空一个结构体的常规方法;也给出了清空一个字符串数组的方法,就是数组首元素 = '/0';

    用memset就非常方便:
    memset(&stTest,0,sizeof(struct sample_struct));    //&stTest,因为创建的是一般对象,不是指针对象,所以要用&取地址

    如果是数组:
    struct sample_struct   TEST[10];

    memset(TEST,0,sizeof(struct sample_struct)*10);

    对这个问题有疑问,不是对函数的疑问,而是因为没有弄懂mem和str的区别。
    mem是一段内存,他的长度,必须你自己记住
    str也是一段内存,不过它的长度,你不用记,随时都可以计算出来
    所以memcpy需要第三个参数,而strcpy不需要

    展开全文
  • memset函数用法精解

    2017-03-03 11:50:11
    memset函数用法精解 1.基本介绍: 需要的头文件 在C中 在C++中  2.函数原型: void *memset(void *s,int ch,size_t n); 函数解释:将s中后n个字节(typedef unsigned int size_t)用ch替换并...

    memset函数用法精解

    1.基本介绍:

    需要的头文件

    在C中 <string.h>

    在C++中 <cstring>


    2.函数原型:

    void *memset(void  *s,int ch,size_t n);
    函数解释:将s中后n个字节(typedef unsigned int size_t)用ch替换并返回s.
    函数作用:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快的方法。

    3.常见错误:

    3.1.搞反了ch和n的位置:
    一定要记住如果要把一个char[20]清零,一定是memset(a,0,20),而不是memset(a,20,0)。

    3.2过度使用memset:
    我想这些程序员可能有某种心理阴影,他们惧怕未经初始化的内存,所以他们会写这样的代码:
    char buffer[20];
    memset(buffer,0,sizeof(char)*20);
    strcpy(buffer,"123");
    这里的memset是多余的,因为这块内存马上就被覆盖了,清零没有意义。

    3.3特别是对于字符类型的,剩余的部分通常是不会为0的,不妨做一个试验,定义一个字符数组,并输入一串字符,如果不用memset实现清零,使用MessageBox显示出来就会有乱码(0表示NULL,如果有,就默认字符结束,不会输出后面的乱码)

    比较下面两个Demo:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char a[5];
    	int i;
    	memset(a,'1',5);
    	for(i=0;i<5;i++)
    	{
    		printf("%c ",a[i]);
    	}
    	printf("\n");
    	return 0;
    }


    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int a[5];
    	int i;
    	memset(a,1,5);             /*如果这里改成memset(a,1,5*sizeof(int))也不可以,因为memset按字节赋值*/
    	for(i=0;i<5;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	printf("\n");
    	return 0;
    }



    重点来了
    第一个程序为什么可以,而第二个不行?
    1.因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用memset还是按字节赋值,这样赋完值以后,每个数组元素的值实际上是ox01010101即十进制的16843009。
    2.如果用memset(a,1,20);(实际上与memset(a,1,5*sizeof(int))的结果是一样的)
    请看下面代码:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int a[5];
    	int i;
    	memset(a,1,20);             /*如果这里改成memset(a,1,5*sizeof(int))也不可以,因为memset按字节赋值*/
    	for(i=0;i<5;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	printf("\n");
    	return 0;
    }

    就是对a指向的内存的20个字节进行赋值,每个都是用ASCII为1的字符去填充的,转为二进制后,1就是00000001,占一个字节。一个int元素是4字节,合在一起就是00000001 00000001 00000001 00000001 ,就等于16843009,就完成了对一个int元素的赋值了。

    再来两个例子加深理解:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int a[5]={1,4,3,5,2};
    	int i;
    	printf("清零前:\n");
    	for(i=0;i<5;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	printf("\n");
    	memset(a,0,5*sizeof(int));          /*注意这里与上面的程序不同*/
    	printf("清零后:\n");
    	for(i=0;i<5;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	printf("\n");
    	return 0;
    }



    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int a[5]={1,4,3,5,2};
    	int i;
    	printf("重新赋值前:\n");
    	for(i=0;i<5;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	printf("\n");
    	memset(a,1,5*sizeof(int));          /*注意这里与上面的程序不同*/
    	printf("清零后:\n");
    	for(i=0;i<5;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	printf("\n");
    	return 0;
    }


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

    本文实例讲述了C++中memset函数用法。分享给大家供大家参考,具体如下:

    功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作

    用 法:void memset(void *s, char ch, unsigned n);

    程序示例:

    #include

    #include

    #include

    int main(void)

    {

    char buffer[] = "Hello world\n";

    printf("Buffer before memset: %s\n", buffer);

    memset(buffer, '*', strlen(buffer) );

    printf("Buffer after memset: %s\n", buffer);

    return 0;

    }

    输出结果:

    Buffer before memset: Hello world

    Buffer after memset: ***********

    编译平台:

    Microsoft Visual C++ 6.0

    也不一定就是把内容全部设置为ch指定的ASCII值,而且该处的ch可为int或者其他类型,并不一定要是char类型。例如下面这样:

    char array[5] = {1,4,3,5,2};

    for(int i = 0; i < 5; i++)

    cout<

    cout<

    memset(array,"0",5*sizeof(int));

    for(int k = 0; k < 5; k++)

    cout<

    cout<

    输出的结果就是:

    1 4 3 5 2

    0 0 0 0 0

    后面的表大小的参数是以字节为单位,所以,对于int或其他的就并不是都乘默认的1(字符型)了。而且不同的机器上int的大小也可能不同,所以最好用sizeof()。

    要注意的是,memset是对字节进行操作,所以上述程序如果改为

    int array[5] = {1,4,3,5,2};

    for(int i = 0; i < 5; i++)

    cout<

    cout<

    memset(array,1,5*sizeof(int));// 注意 这里与上面的程序不同

    for(int k = 0; k < 5; k++)

    cout<

    cout<

    输出的结果就是:

    1 4 3 5 2

    16843009 16843009 16843009 16843009 16843009

    为什么呢?

    因为memset是以字节为单位就是对array指向的内存的5个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。

    所以用memset对非字符型数组赋初值是不可取的!(????我好像看到有可以啊,又带确认)

    例如有一个结构体Some x,可以这样清零:

    memset( &x, 0, sizeof(Some) );

    如果是一个结构体的数组Some x[10],可以这样:

    menset( x, 0, sizeof(Some)*10 );

    memset函数详细说明

    1. void *memset(void *s,int c,size_t n)

    总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

    2. 例子

    main(){

    char *s="Golden Global View";

    clrscr();

    memset(s,'G',6);//貌似这里有点问题//

    printf("%s",s);

    getchar();

    return 0;

    }

    【这个问题相当大,程序根本就运行不下去了,你这里的S志向的是一段只读的内存,而你memset又试图修改它,所以运行时要出错,修改办法char *s修改为char s[]】

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

    char str[100];

    memset(str,0,100);

    4. memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘memset(a, '\0', sizeof(a));

    memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:

    char a[100], b[50];

    memcpy(b, a, sizeof(b));

    //注意如用sizeof(a),会造成b的内存地址溢出。

    strcpy就只能拷贝字符串了,它遇到'\0'就结束拷贝;例:

    char a[100], b[50];

    strcpy(a,b);

    如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0'之前)是否超过50位,如超过,则会造成b的内存地址溢出。

    5. 补充:某人的一点心得

    memset可以方便的清空一个结构类型的变量或数组。

    如:

    struct sample_struct

    {

    char csName[16];

    int iSeq;

    int iType;

    };

    对于变量

    struct sample_strcut stTest;

    一般情况下,清空stTest的方法:

    stTest.csName[0]='\0';

    stTest.iSeq=0;

    stTest.iType=0;

    用memset就非常方便:

    memset(&stTest,0,sizeof(struct sample_struct));

    如果是数组:

    struct sample_struct TEST[10];

    则:

    memset(TEST,0,sizeof(struct sample_struct)*10);

    或:

    memset(TEST,0,sizeof(TEST));

    希望本文所述对大家C++程序设计有所帮助。

    本文标题: C++中memset函数用法详解

    本文地址: http://www.cppcns.com/ruanjian/c/154482.html

    展开全文
  • 基础操作学习 memset函数用法 1:函数原型 /** *@param buffer 指针 *@param ch 赋给buffer的值 *@param n 是buffer的长度 */ extern void *memset(void *buffer, int ch, int n) //fuction 将buffer中当前位置...
  • C++ memset函数用法

    2021-01-30 22:27:37
    memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。 函数介绍 #include<string.h> void *memset(void *s, int ch, size_t n); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 523
精华内容 209
关键字:

memset函数用法