,,详解C语言中的memset()函数

,,详解C语言中的memset()函数

本文主要介绍C语言中的memset()函数,包括它和memcpy()函数的区别。有需要的朋友可以参考一下。

C memset()函数:将内存的前N个字节设置为特定值。

头文件:

#包含字符串. h

memset()函数用于将指定内存的前N个字节设置为特定值,其原型为:

void * memset( void * ptr,int value,size _ t num);

参数描述:

Ptr是指向要操作的内存的指针。

Value是要设置的值。可以将int类型或char类型的值传递给value。int和char可以根据ASCII码相互转换。

Num是ptr的第一个num字节,size_t是无符号整数。

【功能描述】memset()会将ptr指向的内存区域的第num个字节的值设置为value,然后将指针返回给ptr。

Memset()可以将所有内存空间设置为一个特定的值,所以它经常被用来初始化字符数组。例如:

char string[20];

memset(str,' \0 ',sizeof(str)-1);

[返回值]返回指向ptr的指针。

注意:虽然参数值声明为int,但它必须是无符号的char,所以范围在0到255之间。

示例:

复制一个新的纯文本窗口。

#包含stdio.h

#包含stdlib.h

#包含字符串. h

int main()

{

//不能声明为char * str=' http://c . biancheng . net ';

char str[]=' http://c . biancheng . net ';

memset(str,'-',7);

卖出(str);

系统(“暂停”);

返回EXIT _ SUCCESS

}

执行结果:

c.biancheng.net

memmove和memcpy的区别

cpy和memmove()都是C语言中的库函数。在头文件string.h中,作用是复制一定长度memcpy的内容。原型如下:

void *memcpy(void *dst,const void *src,size _ t count);

void *memmove(void *dst,const void *src,size _ t count);

它们的功能是一样的。唯一不同的是,当内存局部重叠时,memmove保证复制的结果是正确的,而memcpy不保证复制的结果是正确的。

第一种情况,复制重叠区域不会有问题,所有内容都可以正确复制。

在第二种情况下,问题出现在右边的两个字节中。这两个word部分的原始内容首先被覆盖,没有保存。所以下一次复制的时候,复制已经被覆盖的内容,这显然是有问题的。

实际上,memcpy只是memmove的一个子集。

两者的c语言实现非常简单,有兴趣的朋友可以去看看。实际上,这两个功能都是通过汇编实现的。

在复制两个有重叠区域的内存时,Memmove可以保证正确的副本,memcopy不行,但是memcopy比memmove快,比如:

char s[]=' 1234567890 ';

char * P1=s;

char * p2=S2;

memy (p2,p1,5)和memmove(p2,p1,5)的结果可能不同。Memmove()可以正确地将P1的前五个字符‘12345’复制到P2,但是memcpy()的结果可能不正确。

memcpy()、 memmove()和memccpy()

这三个函数的作用是将一个内存块复制到另一个内存块。前两个函数的区别在于,它们处理内存区域重叠的方式不同。第三个函数的作用也是复制内存,但是如果遇到某个值,会立即停止复制。

对于库函数,由于没有办法知道传递给它的内存区域,所以应该使用memmove()函数。有了这个功能,就可以保证不会出现内存块重叠的问题。对于应用程序,可以安全地使用memcpy()函数,因为代码“知道”两个内存块不会重叠。

关于memmove的实现:

void *mymemmove(void *dest,const void *src,size_t n)

{

字符温度[n];

int I;

char * d=dest

const char * s=src

for(I=0;I n;我)

temp[I]=s[I];

for(I=0;I n;我)

d[I]=temp[I];

返回目的地;

}

关于memcpy的实现:

void *mymemcpy(void *dest,const void *src,size_t n)

{

char * d=dest

const char * s=src

int * di

const int * si

int r=n % 4;

while (r -)

* d=* s;

di=(int *)d;

si=(const int *)s;

n/=4;

while (n -)

* di=*是;

返回目标;

}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: