百科名片
memset函数
精选 转载lihaichuan 博主文章分类:c++
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
需要的头文件
在C中 <string.h>
在C++中 <cstring>
void *memset(void *s,int ch,size_t n);
第一: 搞反了 ch 和 n 的位置.
一定要记住如果要把一个char a[20]清零,一定是 memset(a,0,20);
而不是 memset(a,20,0);
第二: 过度使用memset,我想这些程序员可能有某种心理阴影,他们惧怕未经初始化的内存,所以他们会写出这样的代码:
char buffer[20];
memset(buffer,0,sizeof(char)*20);
strcpy(buffer,"123");
这里的memset是多余的. 因为这块内存马上就被覆盖了,清零没有意义.
第三: 其实这个错误严格来讲不能算用错memset,但是它经常在使用memset的场合出现
int some_func(struct something *a){
…
…
memset(a,0,sizeof(a)); //a是一个指针,如果系统为32位,则指针类型的大小就是32位,就是4字节。应该改为:memset(a,0,sizeof(someting); 改为结构体,而不是指向某个结构体对象的指针。
…
}
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
linux实时查看java接口数据
本文详细介绍了如何在Linux环境中结合Java Spring Boot应用程序和Python脚本来实时(或定期)查看Java接口的数据。
Python Java 应用程序 Linux 实时接口数据 -
memset
memset函数void *memset(void *str, int c, size_t n)C 库函数 void *memset(void *str, int c, size_t n) 复制字
c语言 c++ linux #include 库函数