【面试题】C语言:模拟实现内存放置函数memset()

原创 2016年05月30日 17:15:50

    模拟实现内存放置函数memset():

    

    我们查看库函数可知,函数原型为:

    void * __cdecl memset ( void *dst, int val, size_t count)


    我们常用于将数组arr向后几个字节初始化置为0,而并不怎么用于置为其他元素,如1。这是因为:


     val = 1,是int型,将它赋给char型dest,则只把低八位赋给dest,下次再接着循环,每次都只把一个字节长度的1赋给dest。如此重复count次,结束。在输出过程中,而arr是int型,一个int型是4个char型,即每次输出的结果都是:1000  0000   1000  0000  1000 0000  1000  0000这个十进制的值。


    代码如下:


void* my_memset(void* p1, int val, size_t count)
{
    char* dest = p1;
    char* strdest = dest;
    
    while (count)
    {
        *dest = val;
        dest++;
        count--;
    }
    return strdest;
}


int main()
{
    char arr[] = "almost every programmer should know memset!";
    char* ret = memset(arr, '-', 6);
    printf("%s", ret);
    system("pause");
    return 0;
}


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1715689

C语言函数_string.h 之 内存填充函数memset

memset,从名字上大概可以猜测到是memery set的意思,也就把内存设置为某个值,事实上的确如此。memset把一块内存设置为指定的值,它的原型为: #include or #include...
  • fyl_csdn
  • fyl_csdn
  • 2015年05月18日 01:27
  • 864

memcpy/memset函数的c语言实现

1、memcpy 头文件:#include 函数原型:void *memcpy(void *dest, const void *src, size_t n) 功能:将指针src指向的内存空间的...
  • u011118276
  • u011118276
  • 2015年07月03日 18:22
  • 2959

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

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

C语言之memset函数的使用

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

模拟实现c语言中的动态内存分配malloc函数

动态存储器分配器维护着一个进程的虚拟的存储器区域,称为堆(heap)。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟存储器片(chunk),要么是已经分配的,要么是空闲的。 我...
  • shandongdaya
  • shandongdaya
  • 2012年02月28日 21:28
  • 3362

C语言memset函数详解与误用

memset为内存填充函数,包含在头文件中,可以用它对一片内存空间进行初始化,其原型为   void *memset(void *s, int v, size_t n);   英文释义如下:  ...
  • hu_jiacheng
  • hu_jiacheng
  • 2013年05月18日 19:11
  • 11291

c语言中的memset函数与bzero函数

上篇文章讲如何避免野指针的时候,其中有个第四步需要清空内存空间,清空内存空间有两个函数可以做到。 1、void *memset(void *s, int c, size_t n); ...
  • yaotan666
  • yaotan666
  • 2016年11月18日 19:59
  • 343

【笔试题】C语言:模拟实现strcat

strcat()函数不限制,而strncat()是有限制的,后者我的博客也有,有兴趣可以查看。     设置有限制的strncat(),因为:像我的博客,C语言:判断一个字符串是否为另外一个字符串旋转...
  • hanjing_1995
  • hanjing_1995
  • 2016年05月30日 17:15
  • 453

memset函数初始化和最短路中的最大值

在最短路中最大值: 最好把最大值设置为0x3f3f3f3f,而非0x7fffffff 理由如下。 #include #include #define MAX1 0x7fffffff #...
  • Mr_Treeeee
  • Mr_Treeeee
  • 2017年04月23日 18:52
  • 247

memset函数源码实现

void * memset(void *dst, int val, size_t count)将dst所指向的某一块内存中的前count个 字节的内容全部设置为val指定的ASCII值, 第一个值为指...
  • iynu17
  • iynu17
  • 2016年06月05日 10:12
  • 254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【面试题】C语言:模拟实现内存放置函数memset()
举报原因:
原因补充:

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