memset, strcpy, strcat 函数

1. strcat()函数

 

不调用C++/C 的字符串库函数,请编写函数 strcat
VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}

strcat()接受两个字符串参数。将第二个字符串的一份拷贝添加到第一个字符串的结尾,从而使第一个字符串成为一个新的组合字符串,第二个字符串不改变。

 

2. memset()函数

void *memset(void *s, char ch, unsigned n)

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作

你刚分配的内存空间,或者是被你用过的内存空间里面的数据是不固定的
为了避免这些无用的数据给自己的程序带来影响,可以用memset把这些内存里面的数据置成某个数值
一般情况下是置0;

/* MEMSET.C: This program uses memset to
* set the first four bytes of buffer to "*".
*/

#include <memory.h>
#include <stdio.h>

void main( void )
{
char buffer[] = "This is a test of the memset function";

printf( "Before: %s/n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s/n", buffer );
}


输出:

Before: This is a test of the memset function
After: **** is a test of the memset function

 

3. strcpy()函数

1.strcpy的实现代码
char*strcpy(char*strDest, const char*strSrc)
{
  assert((strDest != NULL) && (strSrc != NULL));
 
 char *address = strDest;
 while ((*strDest++ = *strSrc++) !='/0' '')
  continue;
  
 return address;
}

2.memcpy的实现代码

void *memcpy(void *pvTo, const void *pvFrom, size_t size)
{
 assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言
 byte *pbTo = (byte *) pvTo; // 防止改变pvTo 的地址
 byte *pbFrom = (byte *) pvFrom; // 防止改变pvFrom 的地址
 
 while(size -- > 0 )
  *pbTo ++ = *pbFrom ++ ;
 
 return pvTo;
  
}

 strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出。  
  strncpy要安全一些。  
  memcpy也可以用来在内存中复制数据,由于字符串是以零结尾的,所以对于在数据中包含零的数据只能用memcpy。  
  性能上它们不一定有多大差别。  

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值