1、 使用 strcat()
strcat()
用于将第二个字符串拼接到第一个字符串的末尾。
#include <stdio.h> #include <string.h> int main() { char str1[50] = "Hello, "; // 目标字符串(必须有足够空间) char str2[] = "World!"; strcat(str1, str2); // 拼接 str2 到 str1 printf("拼接后: %s\n", str1); return 0; }
2、使用 strncat()(更安全)
strncat()
可以限制拼接的字符数,防止溢出。
#include <stdio.h> #include <string.h> int main() { char str1[12] = "Hello, "; char str2[] = "World!"; strncat(str1, str2, sizeof(str1) - strlen(str1) - 1); printf("拼接后: %s\n", str1); return 0; }
3、手动拼接字符串
如果不想使用 strcat()
,可以手动遍历并拼接字符串。
#include <stdio.h> void string_concat(char *dest, const char *src) { while (*dest) dest++; // 找到 dest 末尾 while (*src) *dest++ = *src++; // 复制 src 到 dest *dest = '\0'; // 添加终止符 } int main() { char str1[50] = "Hello, "; char str2[] = "World!"; string_concat(str1, str2); printf("拼接后: %s\n", str1); return 0; }
4、动态分配内存拼接(适用于未知长度)
如果字符串长度不固定,可以使用 malloc()
分配新空间。
#include <stdio.h> #include <stdlib.h> #include <string.h> char* concat_dynamic(const char *str1, const char *str2) { size_t len1 = strlen(str1); size_t len2 = strlen(str2); char *result = (char *)malloc(len1 + len2 + 1); // +1 预留 \0 if (result) { strcpy(result, str1); strcat(result, str2); } return result; } int main() { char str1[] = "Hello, "; char str2[] = "World!"; char *result = concat_dynamic(str1, str2); if (result) { printf("拼接后: %s\n", result); free(result); // 释放动态分配的内存 } return 0; }
5、使用 snprintf()(安全方法)
snprintf()
可以安全地格式化字符串,并确保不会溢出。
#include <stdio.h> int main() { char str1[50] = "Hello, "; char str2[] = "World!"; snprintf(str1, sizeof(str1), "%s%s", str1, str2); printf("拼接后: %s\n", str1); return 0; }