文档视频讲解链接地址
- 腾讯课堂链接 : 46_数组_字符函数strcat与strcpy
5.7 字符串函数strcat,strcpy,strncpy
strcat函数- 字符串拼接函数
- 格式:strcat(字符数组1,字符数组2)
- 功能:把字符数组2连到字符数组1后面
- 返回值:返回字符数组1的首地址
- 说明:
- 字符数组1必须足够大 。
- 连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消, 新串最后加‘\0’。
strcat 函数拼接示意图
实例60
编程使用strcat函数实现两个字符串的拼接功能。- 源文件
01-cbase\60-strcat.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100]={0},str2[50]={0}; printf("请输入第1个字符串 >:") ; scanf("%s",str1); printf("请输入第2个字符串 >:"); scanf("%s",str2); printf("str1=%s\n",str1); printf("str2=%s\n",str2); strcat(str1,str2) ; // 把str2 接到str1的后面,形成一个新的字符串 (str1 + str2) printf("str1=%s\n",str1); printf("str2=%s\n",str2); return 0; }
- 运行结果
请输入第1个字符串 >:hello 请输入第2个字符串 >:world str1=hello str2=world str1=helloworld str2=world
实例61
编程使用自己的代码实现strcat函数实的拼接功能, 不能使用strcat函数。
- 源文件
01-cbase\61-mystrcat.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100]={0},str2[50]={0}; printf("请输入第1个字符串 >:") ; scanf("%s",str1); printf("请输入第2个字符串 >:"); scanf("%s",str2); printf("str1=%s\n",str1); printf("str2=%s\n",str2); //strcat(str1,str2) ; // 把str2 接到str1的后面,形成一个新的字符串 (str1 + str2) // 先把 str1的下标定位到'\0'位置 int len = 0 ; while(str1[len] != '\0') len ++; printf("len = %d\n",len); // len 就是'\0' 字符串结尾的下标 int i = 0 ; #if 0 while(1) { str1[len] = str2[i] ; // str2中的'\0' 也要被复制过去 if(str1[len] == '\0' ) // 说明str1[len] == str2[i] 且str1[len] == '\0', 表示复制完成 break ; len ++ ; i++ ; } #endif // 优化的实现 while((str1[len++] = str2[i++]) != '\0' ) ;// str1[len] != '\0' 要继续复制, 等于'\0'结束循环 printf("str1=%s\n",str1); printf("str2=%s\n",str2); return 0; }
- 运行结果
请输入第1个字符串 >:good 请输入第2个字符串 >:bye str1=good str2=bye len = 4 str1=goodbye str2=bye
strcpy函数
- 格式:strcpy(字符数组1,字符串2)
- 功能:将字符串2,拷贝到字符数组1中去
- 返值:返回字符数组1的首地址
- 说明:
- 字符数组1必须足够大
- 拷贝时’\0’一同拷贝
- 不能使用赋值语句为一个字符数组赋值
- 例如:
strncpy函数
- 格式
char *strncpy(char *dest, const char *src, size_t n);
功能: 把src 中的字符复制到dest 当中, 可以精确复制n个字节到dest当中
返值:返回字符dest的首地址
例如:
strncpy(dest,src,10) ; // 从src数组中复制10个元素到dest当中
实例62
编程使用strcpy函数实现两个字符串的复制功能。- 源文件
01-cbase\62-strcpy.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100]={0},str2[50]={0}; printf("请输入第1个字符串 >:") ; scanf("%s",str1); printf("请输入第2个字符串 >:"); scanf("%s",str2); printf("str1=%s\n",str1); printf("str2=%s\n",str2); strcpy(str1,str2) ; // 把str2 复制到str1 , str1 == str2 , '\0' 会被一同复制 printf("str1=%s\n",str1); printf("str2=%s\n",str2); return 0; }
- 运行结果
请输入第1个字符串 >:goodbye 请输入第2个字符串 >:helloworld str1=goodbye str2=helloworld str1=helloworld str2=helloworld
实例63
编程使用自己的代码实现strpy函数实的复制功能, 不能使用strpy函数。
- 源文件
01-cbase\63-mystrcpy.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100]={0},str2[50]={0}; printf("请输入第1个字符串 >:") ; scanf("%s",str1); printf("请输入第2个字符串 >:"); scanf("%s",str2); printf("str1=%s\n",str1); printf("str2=%s\n",str2); //strcpy(str1,str2) ; // 把str2 复制到str1 , str1 == str2 , '\0' 会被一同复制 int i=0,j=0; #if 0 while(1) { str1[i] = str2[j] ; if(str1[i] == '\0') break; i++; j++; } #endif // str1[i]如果不等于'\0', 表示没有复制完成, while继续循环 // str1[i]如果 等于'\0', 表示复制完成 , while循环结束 while( (str1[i++] = str2[j++]) != '\0' ) ; printf("str1=%s\n",str1); printf("str2=%s\n",str2); return 0; }
- 运行结果
请输入第1个字符串 >:goodbye 请输入第2个字符串 >:sorry str1=goodbye str2=sorry str1=sorry str2=sorry
实例64
strncpy 可以复制精确的字节数
- 源文件
01-cbase\64-strncpy.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100]={0},str2[50]={0}; printf("请输入第1个字符串 >:") ; scanf("%s",str1); printf("请输入第2个字符串 >:"); scanf("%s",str2); printf("str1=%s\n",str1); printf("str2=%s\n",str2); strncpy(str1,str2,5) ; // 把str2 复制5个字符到str1中 printf("str1=%s\n",str1); printf("str2=%s\n",str2); return 0; }
- 运行结果
请输入第1个字符串 >:goodbye 请输入第2个字符串 >:helloworld str1=goodbye str2=helloworld str1=helloye str2=helloworld
本文含有隐藏内容,请 开通VIP 后查看