在C语言中插入字符串
在C语言中,由于字符串是以null结尾的字符数组,直接插入字符串需要手动操作,以下是几种实现字符串插入的方法:

(图片来源网络,侵删)
方法1:使用标准库函数(strcat和strcpy)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* insert_string(const char* original, const char* insert, int position) {
// 计算各部分长度
size_t orig_len = strlen(original);
size_t insert_len = strlen(insert);
// 检查位置是否有效
if (position < 0 || position > orig_len) {
return NULL;
}
// 分配足够空间(原字符串+插入字符串+null终止符)
char* result = (char*)malloc(orig_len + insert_len + 1);
if (!result) {
return NULL;
}
// 复制原字符串的前半部分
strncpy(result, original, position);
result[position] = '\0';
// 拼接插入字符串
strcat(result, insert);
// 拼接原字符串的后半部分
strcat(result, original + position);
return result;
}
int main() {
const char* original = "Hello, world!";
const char* insert = " beautiful";
int position = 7;
char* new_str = insert_string(original, insert, position);
if (new_str) {
printf("Original: %s\n", original);
printf("Inserted: %s\n", new_str);
free(new_str);
} else {
printf("Insertion failed.\n");
}
return 0;
}
方法2:使用指针操作(更高效)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* insert_string_ptr(const char* original, const char* insert, int position) {
size_t orig_len = strlen(original);
size_t insert_len = strlen(insert);
if (position < 0 || position > orig_len) {
return NULL;
}
char* result = (char*)malloc(orig_len + insert_len + 1);
if (!result) {
return NULL;
}
char* dest = result;
// 复制前半部分
memcpy(dest, original, position);
dest += position;
// 复制插入字符串
memcpy(dest, insert, insert_len);
dest += insert_len;
// 复制后半部分
memcpy(dest, original + position, orig_len - position + 1); // +1包含null终止符
return result;
}
int main() {
const char* original = "Hello, world!";
const char* insert = " beautiful";
int position = 7;
char* new_str = insert_string_ptr(original, insert, position);
if (new_str) {
printf("Original: %s\n", original);
printf("Inserted: %s\n", new_str);
free(new_str);
} else {
printf("Insertion failed.\n");
}
return 0;
}
方法3:使用动态数组(C99及以上)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insert_string_dynamic(char** original, const char* insert, int position) {
size_t orig_len = strlen(*original);
size_t insert_len = strlen(insert);
if (position < 0 || position > orig_len) {
return;
}
// 重新分配内存
char* new_str = (char*)realloc(*original, orig_len + insert_len + 1);
if (!new_str) {
return;
}
// 移动后半部分
memmove(new_str + position + insert_len, new_str + position, orig_len - position + 1);
// 插入新字符串
memcpy(new_str + position, insert, insert_len);
*original = new_str;
}
int main() {
char* original = strdup("Hello, world!"); // 需要分配内存
const char* insert = " beautiful";
int position = 7;
printf("Original: %s\n", original);
insert_string_dynamic(&original, insert, position);
printf("Inserted: %s\n", original);
free(original);
return 0;
}
注意事项
- 内存管理:使用
malloc/realloc分配的内存需要手动释放 - 边界检查:确保插入位置在有效范围内
- 字符串长度:计算时要包括null终止符
- 安全性:考虑使用
strncpy和strncat限制复制的字符数,防止缓冲区溢出
方法都可以实现字符串插入,选择哪种取决于你的具体需求和C语言版本,方法2(指针操作)通常是最高效的。

(图片来源网络,侵删)
