058. 编写函数连接两个字符串
在C语言中,字符串连接是一个常见的操作。标准库函数 strcat
可以实现字符串的连接,但它要求目标字符串有足够的空间来容纳连接后的结果。为了更好地理解字符串操作,我们可以手动编写一个字符串连接函数来实现这一功能。
C语言实现字符串连接
#include <stdio.h>
#include <string.h> // 用于 strlen 函数
// 自定义字符串连接函数
void customStrcat(char* dest, const char* src) {
if (dest == NULL || src == NULL) {
printf("输入的指针为空!\n");
return;
}
// 找到目标字符串的末尾
char* temp = dest;
while (*temp != '\0') {
temp++;
}
// 从源字符串的开头开始复制,直到遇到字符串结束符 '\0'
while (*src != '\0') {
*temp = *src;
temp++;
src++;
}
// 添加字符串结束符 '\0'
*temp = '\0';
}
int main() {
char str1[100] = "Hello, "; // 确保目标数组足够大
char str2[] = "World!";
printf("原始字符串1: %s\n", str1);
printf("原始字符串2: %s\n", str2);
// 调用自定义字符串连接函数
customStrcat(str1, str2);
printf("连接后的字符串: %s\n", str1);
return 0;
}
代码说明
函数定义:
-
customStrcat
接收两个参数:目标字符串dest
和源字符串src
。 -
检查输入指针是否为空,避免空指针解引用导致的错误。
找到目标字符串的末尾:
- 使用一个临时指针
temp
遍历目标字符串dest
,直到找到字符串结束符'\0'
,从而确定目标字符串的末尾位置。
复制源字符串:
- 从源字符串
src
的开头开始,逐个复制字符到目标字符串的末尾,直到遇到源字符串的结束符'\0'
。
添加结束符:
- 在连接完成后,添加字符串结束符
'\0'
,确保目标字符串是一个有效的C字符串。
主函数:
-
定义一个足够大的目标数组
str1
和一个源字符串str2
。 -
调用
customStrcat
函数将源字符串连接到目标字符串的末尾。 -
打印原始字符串和连接后的字符串。
示例运行
输入:
无输入
输出:
原始字符串1: Hello,
原始字符串2: World!
连接后的字符串: Hello, World!
注意事项
- 目标数组的大小:确保目标数组
dest
的大小足够大,以容纳连接后的结果。否则,可能会导致缓冲区溢出。 - 空指针检查:在函数中检查输入指针是否为空,避免空指针解引用导致的程序崩溃。
- 字符串结束符:确保在连接完成后添加字符串结束符
'\0'
,否则目标字符串可能不会正确终止。
使用标准库函数 strcat
虽然手动实现字符串连接函数有助于理解字符串操作的原理,但在实际开发中,通常推荐使用标准库函数 strcat
,因为它经过了优化,并且更安全(如果正确使用的话)。例如:
#include <stdio.h>
#include <string.h> // 包含 strcat 函数
int main() {
char str1[100] = "Hello, "; // 确保目标数组足够大
char str2[] = "World!";
printf("原始字符串1: %s\n", str1);
printf("原始字符串2: %s\n", str2);
// 使用标准库函数 strcat
strcat(str1, str2);
printf("连接后的字符串: %s\n", str1);
return 0;
}
总结
通过手动实现字符串连接函数,可以更好地理解字符串操作的基本原理。在实际应用中,建议使用标准库函数 strcat
,但了解其内部实现原理有助于更好地使用它。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)