strcpy()的注意事项以及strncpy()的用处

原文地址:http://www.cnblogs.com/ngnetboy/archive/2012/11/19/2777384.html

 

 

大家都知道C中的strcpy()函数是用来复制字符串的库函数。先附上代码看看strcpy()函数的功能:

#include<stdio.h>
#include<string.h>
#define MAX 20
int main(void)
{
	char a[MAX]="abc";
	char b[MAX]="abcdefghi";
	strcpy(a,b);
	puts(a);
	puts(b);
}

很明显,结果如下:

 

  此函数中还有两个高级属性——

  ①:它是char *类型,它返回的是第一个参数的值,即一个字符的地址。

  ②:第一个参数不需要指向数组的开始。

先附上代码来说明这两个属性:

#include<stdio.h>
#include<string.h>
#define MAX 40

int main(void)
{
	char *a="beast";
	char b[MAX]="you are the beast one.";
	char *p;
	p=strcpy(b+8,a);
	puts(a);
	puts(b);
	puts(p);
} 

b+8的位置是the的第一个字母t,

看到这个代码你是不是认为结果如下:

beast

you ate beasteast one

beasteast one

应该是这样吗?结果呢?

 

为什么会这样呢?

我们再来看看strcpy()函数的功能:将一个字符串复制到另一个字符串。这个代码无疑是把字符串a复制到b的第八个位置之后。

但是字符串的特性是什么呢?字符串最后一个字节存放的是一个空字符——“\0”,用来表示字符串的结束。把a复制到b之后会令a的空字符把复制后的字符串隔断,所以会显示到beast就会结束。

而输出p怎么会输出beast呢?这就是此函数的第一个属性,此函数会返回复制之后的字符串的首地址。所以········你懂得。

可能到这里你已经发现了一些问题,如果想把一个字符串的一部分复制到另一个字符串的某个位置,该怎么办呢,显然strcpy()函数是满足不了这个功能的,strncpy()函数是为了弥补strcpy()函数不能检查目标字符串是否容纳下源字符串的不足而设定的一个函数。并且完全可以实现这个功能。

附上代码如下:

#include<stdio.h>
#include<string.h>
#define MAX 30

int main(void)
{
	char *a="abcdefg";
	char b[MAX]="you are the beast one.";
	strncpy(b+4,a,3);
	puts(b);
} 

这段代码把字符串a的前三个字符赋值到b的第五个位置之后,所以结果如下:

由于strcpy()函数和gets()函数并不会检查目标字符串是否容纳下源字符串,所以使用这两个函数需谨慎使用!

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值