必威体育Betway必威体育官网
当前位置:首页 > IT技术

memset函数

时间:2019-08-06 21:14:26来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

memset

功 能: 将s所指向的某一块内存中的每个字节内容全部设置为ch指定的ASCII值,

块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作

用 法: void *memset(void *s, char ch, unsigned n);

程序例:

#include <string.h>

#include <stdio.h>

#include <memory.h>

int main(void)

{

char buffer[] = "hello world/n";

printf("Buffer before memset: %s/n", buffer);

memset(buffer, '*', strlen(buffer) );// //数组直接首地址传进去。 主要是对数组指针的修改!!因为可以被修改而const char int等这些不能被修改 和malloc 配套使用

printf("Buffer after memset: %s/n", buffer);

return 0;

}

输出结果:

Buffer before memset: Hello world

Buffer after memset: ***********

memset函数详细说明

1。void *memset(void *s,int c,size_t n)

总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

2。例子

main(){

char *s="Golden Global View";

clrscr();

memset(s,'G',6);//貌似这里有点问题//

printf("%s",s);

getchar();

return 0;

} 

【这个问题相当大,程序根本就运行不下去了,你这里的S志向的是一段只读的内存,而你memset又试图修改它,所以运行时要出错,修改办法char *s修改为char s[]】

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

char str[100];

memset(str,0,100);

4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘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的内存地址溢出。

5.补充:某人的一点心得

memset可以方便的清空一个结构类型的变量或数组。

如:

struct sample_struct

{

char csName[16];

int iSeq;

int iType;

};

对于变量

struct sample_strcut stTest;

一般情况下,清空stTest的方法:

stTest.csName[0]='/0';

stTest.iSeq=0;

stTest.iType=0;

用memset就非常方便:

memset(&stTest,0,sizeof(struct sample_struct));

如果是数组:

struct sample_struct TEST[10];

memset(TEST,0,sizeof(struct sample_struct)*10);

相关阅读

C++ 中 ZeroMemory、memset 危险需慎用

使用C/C++编程时,常使用ZeroMemory、memset或 “={0}”来对结构体对象进行初始化或清零。然而这三种方式都有各自的特点,使用时需谨

memset()

memset note memset函数原型为:**void *memset(void *buffer,int c,int count)**包含在sting.h©和cstring(C++)头文件中buffer为

分享到:

栏目导航

推荐阅读

热门阅读