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;
}