首先表明,本人初来乍到,今天复习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;
}
程序很好理解,重点是结束符'\0'。这里我再说一个小问题,就是'\0'不是空格,好多人都问了我这个问题,而且还运行程序说了,当时同学的疑惑是,空格为何不算结束,scanf输入字符串的时候遇见空格是换行,Tab是终止,而gets函数只是遇到回车才能结束。如下面语句结果:
scanf("%s",str1);//输入asc dd hui,回车,输出之后只是asc
gets(str1);//输入asc dd hui,回车,输出结果是asc dd hui