C语言关于如何运用指针在一个字符串中的指定位置插入另一串字符串

我想知道如何运用指针在一个字符串中的指定位置插入另一串字符串
例如:
输入:We are students↙ 7↙ SZU ↙
屏幕输出:We are SZU students


#include <stdio.h>
#include <string.h>

void insert_string(char *str1, char *str2, int pos) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    int i;

    // 将str1中pos位置后的字符向后移动len2个位置
    for (i = len1; i >= pos; i--) {
        *(str1 + i + len2) = *(str1 + i);
    }

    // 将str2插入到str1中pos位置
    for (i = 0; i < len2; i++) {
        *(str1 + pos + i) = *(str2 + i);
    }
}

int main() {
    char str1[100] = "hello world";
    char str2[100] = "beautiful ";
    int pos = 6;

    printf("插入前的字符串:%s\n", str1);
    insert_string(str1, str2, pos);
    printf("插入后的字符串:%s\n", str1);

    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    回答:

    可以通过指针操作来实现在指定位置插入字符串的操作,具体步骤如下:

    1. 定义源字符串和目标字符串,以及待插入的字符串。并分配足够的内存空间。
    char source[] = "We are students";
    char target[BUFSIZ] = "";    
    char *insert = "SZU";
    
    1. 计算新字符串的长度并进行内存分配。
    int source_len = strlen(source);
    int insert_len = strlen(insert);
    int pos = 7;
    int target_len = source_len + insert_len; 
    char *new_str = (char*) malloc(target_len + 1);
    
    1. 将源字符串和待插入字符串分别拷贝至新字符串中。
    memcpy(new_str, source, pos);
    memcpy(new_str + pos, insert, insert_len);
    memcpy(new_str + pos + insert_len, source + pos, source_len - pos + 1);
    
    1. 将新字符串输出,即为我们想要的结果。
    printf("%s\n", new_str);
    

    完整代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char source[] = "We are students";
        char target[BUFSIZ] = "";    
        char *insert = "SZU";
        int source_len = strlen(source);
        int insert_len = strlen(insert);
        int pos = 7;
        int target_len = source_len + insert_len; 
        char *new_str = (char*) malloc(target_len + 1);
    
        memcpy(new_str, source, pos);
        memcpy(new_str + pos, insert, insert_len);
        memcpy(new_str + pos + insert_len, source + pos, source_len - pos + 1);
    
        printf("%s\n", new_str);
    
        free(new_str);
    
        return 0;
    }
    

    当输入 "We are students",位置:7,待插入字符串:"SZU",则输出为 "We are SZU students"。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^