strncpy和memcpy

strcpy strncpy

memcpy

#include <string.h>

char *strncpy(char *restrict s1, const char *restrict s2, size_t n);

DESCRIPTION       

The  strncpy()  function shall copy not more than n bytes (bytes that follow a null byte are not copied) from the array pointed to by s2 to the array pointed to by s1.  If copying takes place between objects that overlap, the behavior is undefined.If the array pointed to by s2 is a string that is shorter than n bytes, null bytes shall be appended to the copy in the array pointed  to by s1, until n bytes in all are written.

RETURN VALUE       

The strncpy() function shall return s1; no return value is reserved to indicate an error.

 
  
#include < string .h >
int main( int agrn, char * agrc[])
{
char dest[ 1024 ] = { 0 };
char * src = " Hello,Wrold " ;
strncpy(dest,src,
sizeof (dest) - 1 );
dest[
1024 - 1 ] = 0 ;
return 0 ;
}


SYNOPSIS       #include <string.h>
void *memcpy(void *restrict s1, const void *restrict s2, size_t n);
DESCRIPTION       

The  memcpy()  function  shall copy n bytes from the object pointed to by s2 into the object pointed to by s1. If copying takes place between objects that overlap, the behavior is undefined.

RETURN VALUE       

The memcpy() function shall return s1; no return value is reserved to indicate an error.

 
  
#include < string .h >
#include
< iostream >
using namespace std;
struct Object
{
char name[ 255 ];
void print()
{
cout
<< " Name: " << name;
}
};
struct Test: public Object
{
int id;
short sex;
};
int main( int agrn, char * agrc[])
{
Test obj1;
strncpy(obj1.name,
" Liuda " , sizeof (obj1.name));
obj1.name[
sizeof (obj1.name) - 1 ] = 0 ;
obj1.id
= 123 ;
obj1.sex
= 0 ;
Test obj2;
memcpy(
& obj2, & obj1, sizeof (obj1));
obj2.print();
return 0 ;
}

在来说说他们的区别。

strncpy复制n个,但是,他毕竟是字符串函数,所以碰到\0,就不复制了。

memcpy就不是,他一定会复制n个字节的数据。

转载于:https://www.cnblogs.com/xloogson/archive/2011/07/04/2097064.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值