C语言文件,字符串复制问题

在main函数中创建一个文件,将键盘输入的字符串写入文件中。打开该文件,读出字符串。将字符串从指定下标p处开始的前q个字符(包括p处字符,q≤p+1)复制到字符串的结尾,形成的新串保存到另一个文件中。比如,abcdefg,从下标3处开始的前2个字符复制到字符串的结尾,得新串:abcdecd。要求:p和q均由键盘输入。

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

int main() {
    char filename[100];
    char str[1000];
    int p, q;

    printf("请输入要创建的文件名(包括路径):");
    scanf("%s", filename);

    // 打开文件,准备写入
    FILE *fp = fopen(filename, "w");
    if (fp == NULL) {
        printf("文件创建失败!\n");
        return 1;
    }

    printf("请输入要写入的字符串:");
    scanf("%s", str);

    // 将字符串写入文件
    fprintf(fp, "%s", str);

    // 关闭文件
    fclose(fp);

    // 打开文件,准备读取
    fp = fopen(filename, "r");
    if (fp == NULL) {
        printf("文件打开失败!\n");
        return 1;
    }

    // 读取文件内容到字符串中
    fgets(str, 1000, fp);

    // 关闭文件
    fclose(fp);

    // 输入p和q
    printf("请输入p和q:");
    scanf("%d %d", &p, &q);

    // 复制字符串
    int len = strlen(str);
    char new_str[1000];
    strcpy(new_str, str);
    for (int i = 0; i < q; i++) {
        new_str[len - q + i] = str[p - q + i + 1];
    }
    new_str[len - q + q] = '\0';

    // 打开文件,准备写入新字符串
    printf("请输入要创建的新文件名(包括路径):");
    scanf("%s", filename);
    fp = fopen(filename, "w");
    if (fp == NULL) {
        printf("文件创建失败!\n");
        return 1;
    }

    // 将新字符串写入文件
    fprintf(fp, "%s", new_str);

    // 关闭文件
    fclose(fp);

    printf("处理完毕!\n");

    return 0;
}