memset函数

转载 2006年05月27日 09:16:00
memset函数的用法:
将已开辟内存空间 s 的首 n 个字节的值设为值 c

下面是一个例子

#include <stdio.h>
#include <string.h>
main(){
    char *s="Golden Global View";

    clrscr();

    memset(s,'G',6);
    printf("%s",s);

    getchar();
    return 0;
} 


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

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



memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];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的内存地址溢出。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char a[5];
    memset(a,'1',5);
    for(int i = 0;i < 5;i++)
      cout<<a[i]<<"  ";
    system("pause");
    return 0;
}
而,如下程序想吧数组中的元素值设置成1,却是不可行的
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int a[5];
    memset(a,1,5);//这里改成memset(a,1,5 *sizeof(int))也是不可以的
    for(int i = 0;i < 5;i++)
      cout<<a[i]<<"  ";
    system("pause");
    return 0;
}

因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。
而第二个程序a是整型的,使用memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。

memset()函数及其作用

1. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组,         ...
  • qq_27522735
  • qq_27522735
  • 2016年11月28日 10:39
  • 41158

关于memset函数的需要注意的问题

最近用到了memset函数,但是忽略了一点:memset函数的写入是按字节写入的。以下为自己犯错的地方: int *a = new int [100]; memset(a, 10, sizeof(i...
  • u012273127
  • u012273127
  • 2017年02月14日 18:58
  • 471

C++中memset()函数的用法详解

头文件:cstring 或 memory 话说刚开始使用memset的时候一直以为memset是对每一个int赋值的,心里想有了memset还要for循环对数组进行初始化干嘛。但其实memset...
  • lyj2014211626
  • lyj2014211626
  • 2017年03月23日 23:52
  • 2329

透彻分析C/C++中memset函数

透彻分析C/C++中memset函数     在C语言中,经常需要对内存进行操作,里面涉及很多函数,但是memset函数的使用有一点需要大家格外注意,这也是我在做项目时遇到过的一个问题,调试了很久...
  • dan15188387481
  • dan15188387481
  • 2015年11月03日 21:33
  • 10751

C语言之memset函数的使用

转自:老生常谈,正确使用memset 本文归纳了下使用memset几个需要注意的地方,虽然内容很简单,但也希望对大家有所帮助。 1. memset是以字节为单位,初始化内存块。 当初始化一个...
  • wxm349810930
  • wxm349810930
  • 2016年08月28日 22:10
  • 1149

C语言中memset函数详解(很清晰易懂)

功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,   块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作   用 法: void *me...
  • PengPengBlog
  • PengPengBlog
  • 2016年09月20日 10:23
  • 4624

关于C++ memset函数使用的问题

1. 关于该函数 函数原型:  memset(void *s,int ch,size_t n)       函数说明:       memset函数是计算机中C/C++语言函数。将s所指向的某一块内存...
  • wangwei6125
  • wangwei6125
  • 2017年06月17日 22:26
  • 207

memset函数导致内存泄露的问题

我们一般常说的内存泄漏是指堆内存的泄漏。程序从堆中分配的内存使用完毕后必须显式释放,否则这块内存就不能被再次使用,即这块内存泄漏了。内存泄漏导致软件在运行过程中占用越来越多的内存,程序的效率会越来越低...
  • sogouauto
  • sogouauto
  • 2015年06月03日 10:02
  • 1488

C语言中memset函数详解

功能:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。 用法:void *memset(void *s, c...
  • kevinhg
  • kevinhg
  • 2015年04月30日 09:45
  • 13220

memset函数赋初值问题

我的第一篇博客。。。 今天写memset函数的时候遇到了老生常谈的话题,#include #include using namespace std; int main () { int ...
  • eo_yohe
  • eo_yohe
  • 2016年05月17日 18:59
  • 1185
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memset函数
举报原因:
原因补充:

(最多只允许输入30个字)