【面试题】C语言:模拟实现内存放置函数memset()
2016-05-30 17:15
330 查看
模拟实现内存放置函数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这个十进制的值。
代码如下:
本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1715689
我们查看库函数可知,函数原型为:
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语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
- 【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。
- C语言:实现一个函数itoa(int n,char s[]),将整数n这个数字转换为对应的字符串,保存到s中
- C语言:字符数组的内容为;tneduts a ma i;,内容改为i am a student.只能开辟有限个空间
- 【面试常考】C语言:输入:"student a am i",输出"i am a student,不能使用库函数
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'
- 【笔试题】C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'。
- C语言:每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水。
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- C语言:用递归函数DigitSum(n)实现输入1729,输出sum=1+7+2+9=19的值
- C语言:编写reverse_string(char * string)(递归实现)函数,将参数字符串中的字符反向排列
- C语言:编写一个函数实现n^k,使用递归实现
- C语言:模拟实现strstr函数,若是子串,输出子串后面的字符串,否则输出null
- C语言:实现一个函数,打印乘法口诀表,如:输入9,输出9*9口诀表
- 【面试题】C语言:使用函数实现两个数的交换
- C语言:实现一个函数判断year是不是闰年
- C语言:实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置