① 求c语言memset的具体用法,什么时候必须用,什么时候可以不用以及可以用什么替换memset
memset函数使用详解
今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值.
更详细的解说见网络 --> http://ke..com/view/982208.htm
1。void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
2。例子
#include
void main(){
char *s="Golden Global View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return 0;
}
3。memset() 函数常用于内存空间初始化。如:
char str[100];
memset(str,0,100);
4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];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);
6。strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#i nclude
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#i nclude
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#i nclude
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。
② C语言memset问题
首先你memset不能用来初始化int类型的内存,也不是不能,是你那么做了它也不会去按照你想的去初始化,除非你初始化值是0。原因是memset是按字节进行初始化的,举例,memset(pStart, 2, sizeof(int)); 一般sizeof(int)值是4,那么这个memset会将pStart开始的4个内存单元(4字节),每个字节都初始化成2。这样初始化之后,如果你要的是这个int类型的数值,那这个int值就是0x2020202,是这个值。这个和你做的那个初始化是类似的。
然后就是你使用memset的时候使用的是sizeof(data),因为data是一个指针,那么他的长度32位下永远都是4,所以你只初始化了4个字节,也就是只初始化了申请的第一个int单元,后面的两个都没有进行初始化。所以第一个int单元的值是0x2020202,也就是十进制的33686018,即你输出的第一个数,而后面的两个由于没有初始化都是以前的值,是随机的不可预测的。
个人觉得memset用来初始化的话一般都是用来将内存单元清0,想要初始化成一个具体的数值的话,除非你初始化的单元都是字节的,那样是可行的,其他的都很不方便。
③ c语言函数中的memset()是怎么用的
j=0;是一句初始化语句,在int
j;声明变量后变量的值是未知的,所以要在使用前赋初值。
memset(word,0,21);这个函数第一参数是一个指针,指向目标内存的首地址,第二个参数是你要赋给指定内存块中各个字节的值。第三个参数是被操作内存块的字节数。连在一起这个语句的意思是,从word指向的内存地址开始的21个字节的内存,赋成0。其实也是一个初始化操作。
④ 请问在C语言编程中memset(table,0,sizeof(table))代表什么意思。
将table的李困地址空间全部置0,memset是内存重置函数,第一个哪好念参数是要重置的首地址,第二个是要重置的结果,第三个是重置的袜陆大小
sizeof是计算table内存空间大小的意思
⑤ C语言 memset函数
memset
原型:extern
void
*memset(void
*buffer,
int
c,
int
count);
用法:#include
<string.h>
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。
举例:
//
memset.c
#include
<syslib.h>
#include
<string.h>
main()
{
char
*s="Golden
Global
View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return
0;
}
相关函数:bzero,setmem,strset
⑥ c语言中memset是什么意思
memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:
void *memset(void*,int,unsigned);
其中陪简void*表示地址
memset()的第一个实参是数组名好乱培,数组名作参数即数组作参数,它仅仅只是一个数组的起始地址而已。
实现第一个memset()函数调用的内存布局见图7-3。友唯 在函数memset()栈区,从返回地址往上依次为第1,2,3个参数。第1个参数中的内容是main()函数中定义的数组ia1的起始地址。第2个参数是给数组设置的值(0),第3个参数是数组的长度(50*2)。函数返回时,main()函数的数组中内容全置为0。
⑦ C语言中,memset函数都可以给什么类型的数组清零
任何类型的数组都可以,实际上memset函数是对某一个地址以及该地址之后的一串空间进行赋值操作,只要是地址值,都可以被赋值。x0dx0a1、memset是计算机中C/C++语言函数。将帆顷丛s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第二个值为指定的内存地址,块的大小由第三个参数指定,这个函乎核数通常为新申请的内存做初始化工作态樱, 其返回值为指向s的指针。x0dx0a2、函数介绍:void *memset(void *s, int ch, size_t n);x0dx0a函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。x0dx0amemset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
⑧ c语言中的meset 是什么意思 如何用
memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘
’或‘\0’;例:char
a[100];memset(a,
'\0',
sizeof(a));
memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char
a[100],b[50];
memcpy(b,
a,
sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
memcpy
原型:extern
void
*memcpy(void
*dest,
void
*src,
unsigned
int
count);
用法:#include
<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
memset
原型:extern
void
*memset(void
*buffer,
int
c,
int
count);
⑨ c语言里有memset()怎么用需要什么头文件
包含在 <string.h>头文件中
memset为内存填充函数,可以用它对一片内存空间进行初始化, 它可以一字节一字节地把整个数组设置为一个指定的值
其原型为
void *memset(void *s, int v, size_t n);
这里s可以是数组名,也可以是指向某一内在空间的指针;
v为要填充的值;
n为要填充的字节数,通常为sizeof(s);
使用memset时要注意的是,memset是逐字节进行填充,所以s一般为char *型。
⑩ C语言里 memset和sizeof是什么意思
memset是个函数,它在string.h头文件中有声明。
它有轮拦凳三个参数,一是所要set的首地址,二是set的值,三是set的字节数,
num肯定是个数组,因为数组在传参时能自动转成指向数组的衡晌首元素的指针,
如果腊旅不是数组,应该写成memset(&num, 0, sizeof(num));