您的位置:首页 > 其它

strcpy与strncpy的区别

2015-11-21 15:44 369 查看
首先看c++ reference中关于strcpy与strncpy的详细说明。

参看http://www.cplusplus.com/reference/cstring/strcpy/和http://www.cplusplus.com/reference/cstring/strncpy/。

其次在stackoverflow上有一个相关问题:

问题:

Edit: I've added the source for the example.

I came across this
example:
char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;

/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);

/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );


Which produced this output:
destination is originally = 'abcdefg'
After strcpy, destination becomes '123456789'

destination1 is originally = 'abcdefg'
After strncpy, destination1 becomes '12345fg'


Which makes me wonder why anyone would want this effect. It looks like it would be confusing. This program makes me think you could basically copy over someone's name (eg. Tom Brokaw) with Tom Bro763.

What are the advantages of using
strncpy()
over
strcpy()
?

解答:

strncpy
combats
buffer overflow by requiring you to put a length in it.
strcpy
depends
on a trailing
\0
,
which may not always occur.

Secondly, why you chose to only copy 5 characters on 7 character string is beyond me, but it's producing expected behavior. It's only copying over the first
n
characters,
where
n
is
the third argument.

The
n
functions
are all used as defensive coding against buffer overflows. Please use them in lieu of older functions, such as
strcpy
.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: