Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说memset清零数组的坑,希望能够帮助你!!!。
函数声明:
void *memset(void *s, int c, size_t n)
函数解释:将s中当前位置后面的n个字节 ,用 c 替换并返回 s
函数作用:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
使用注意:
int a1[10];
memset(a1, 0, sizeof(a1));
memset(a1, -1, sizeof(a1));
这是因为memset的实现时,会把填充内存的值转换成无符号字符形式
int型(默认占4字节)数组在内存的排布示意如下
memset 是按字节赋值,即使给它int类型数,它也是只取该数最低位的一个字节来赋值。0的二进制数都是0,-1的二进制数都是1,这样取成无符号数最后的一个字节就是下面两值,即这块内存是全0或是全1
00000000
11111111
所以给非单字节的数组或内存清零时,都是这个问题,只有0和-1是正确的期望值。
给字符串赋初值,本身就是该库函数的使用场景,只需知道c的取值是无符号char型就行,对应字符的ASCII码。
函数原型(C标准库):
void *(memset) (void *s,int c,size_t n)
{
const unsigned char uc = c;
unsigned char *su;
for(su = s;0 < n;++su,--n)
*su = uc;
return s;
}
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章