c 语言中的memset函数

c 语言中的memset函数


2024年6月9日发(作者:)

C语言中使用memset的注意事项

2007-08-10 09:31

memset为内存填充函数,包含在头文件中,可以用它对一片内存空间进行初始化,

其原型为

void *memset(void *s, int v, size_t n);

英文释义如下:

Copies the value v (converted to type unsigned char) to the first n bytes pointed to by s; returns s.

这里s可以是数组名,也可以是指向某一内在空间的指针;v为要填充的值;n为要填充的字

节数,通常为sizeof(s);

使用memset时要注意的是,memset是逐字节进行填充,所以s一般为char *型。对于其它类

型的s,可以填充的值有两个,0和-1。这是因为计算机中用二进制补码表示数字,0和二进制

补码为全0,-1的二进制补码为全1。如果要初始化为其它的值,可以用一个for循环,如下:

for (int i=0; i

{

s[i] = v;

}

//////////////////////////////////

memset函数的用法:

将已开辟内存空间 s 的首 n 个字节的值设为值 c

下面是一个例子

#include

#include

main(){

char *s="Golden Global View";

clrscr();

memset(s,'G',6);

printf("%s",s);

getchar();

return 0;

}

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

char str[100];

memset(str,0,100);

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

的内存地址溢出。

#include

#include

using namespace std;

int main()

{

char a[5];

memset(a,'1',5);

for(int i = 0;i < 5;i++)

cout<

system("pause");

return 0;

}

而,如下程序想吧数组中的元素值设置成1,却是不可行的

#include

#include

using namespace std;

int main()

{

int a[5];

memset(a,1,5);//这里改成memset(a,1,5 *sizeof(int))也是不可以的

for(int i = 0;i < 5;i++)

cout<

system("pause");

return 0;

}

因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以

字节为单位进行赋值的,所以你输出没有问题。

而第二个程序a是整型的,使用memset还是按字节赋值,这样赋值完以后,每个数组元素的

值实际上是0x01010101即十进制的16843009。

////////////////////////////////////////

翻译过来为:将已开辟内存空间 s 的首 n 个字节的值设为值 c

下面是一个例子

#include

#include

main(){

char *s="Golden Global View";

clrscr();

memset(s,'G',6);

printf("%s",s);

getchar();

return 0;

}

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

char str[100];

memset(str,0,100);

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

的内存地址溢出。


发布者:admin,转转请注明出处:http://www.yc00.com/news/1717923468a2745432.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信