c语言strcat与strcpy的一丝理解

 首先表明,本人初来乍到,今天复习strcat和strcpy的时候,深究了一丝细节问题。

 strcat(STRing CATenate)函数——字符串连接函数

strcat(str1,str2);——这条语句的意思是将str2字符串连接在str1字符串结束字符后面(注意:此处不是字符串后面,而是结束字符后面,一会细说),并加入一个结束符'\0'(这是重点)。其中由于要改变str1字符串,所以,str1必须是字符数组,不能为字符常量;而str2不做改变,所以可为字符数组,也可为字符常量。

 strcpy(STRingCoPY)函数——字符串复制函数

strcpy(str1,str2);——这条语句的意思是将字符串str2复制到字符数组str1中去,重点是,将str2的结束符'\0'也复制过去,这就是细节之处。和之前一样,str2可为字符数组也可为字符常量。

 其实字符串处理函数有好几个,我所说明的两个函数所实现的作用也很好理解,那么我为什么只提及了这两个函数?因为我要说的是之前所提到的细节,下来我将直接举例说明:

首先strcat函数:

#include<stdio.h>
#include<string.h>
int main(){
 char str1[64] = "hello World !\0 World hello";
 char str2[] = "abc";
 strcat(str1, str2);
 puts(str1);//puts函数输出字符串,在输出时将字符串结束标志'\0'转换成'\n',即回车
 return 0;
}

以上程序输出的结果是:hello World !abc  (注意不是str1最后,而是'\0'后)

接下来是strcpy函数:

#include<stdio.h>
#include<string.h>
int main() {
	char str1[64] = "hello World !\0 World hello";
	char str2[] = "abc";
	strcpy(str1, str2);
	puts(str1);
	return 0;
}
以上程序输出的结果是:abc

 程序很好理解,重点是结束符'\0'。这里我再说一个小问题,就是'\0'不是空格,好多人都问了我这个问题,而且还运行程序说了,当时同学的疑惑是,空格为何不算结束,scanf输入字符串的时候遇见空格是换行,Tab是终止,而gets函数只是遇到回车才能结束。如下面语句结果:

scanf("%s",str1);//输入asc dd hui,回车,输出之后只是asc

gets(str1);//输入asc dd hui,回车,输出结果是asc dd hui

 
不懂的可以试试上面代码实现。

 
再回到刚提的问题,空格不是'\0',ASCLL码中字符数值都给出了,可以调试上面一个代码看一下结果:

 
可以看到str1[5]是空格,值为32。而str1[13]是'\0',值为0。



好了,结束,希望能帮助到需要帮助的人。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值