使用函数实现字符串部分复制 为什么我的代码不对

本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。

函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20
 
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
 
int main()
{
    char t[MAXN], s[MAXN];
    int m;
    
    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);
 
    return 0;
}
 
/* 你的代码将被嵌在这里 */

输入样例:

7
happy new year

输出样例:

new year

想知道我的程序应该怎么改

void strmcpy( char *t, int m, char *s ){
    int i;
    if(m>=20){
        s=0;
    }
    for(i=0;m+i<20;i++){    
    s[i]=t[m-1+i];
    }
    
}

报错如下

img

【以下回答由 GPT 生成】

问题分析: 1. 函数声明:函数头部没有指定返回类型。 2. 数组越界:在循环复制字符串的过程中,没有考虑到字符串t结束的情况。 3. 字符串结束标志:在复制字符串的最后,没有添加字符串结束标志。

解决方案: 1. 添加函数返回类型为void的声明。 2. 在循环条件中添加对字符串t结束的检查。 3. 在复制字符串结束后,添加字符串结束标志。

代码优化如下:

void strmcpy( char *t, int m, char *s )
{
    int i;

    for(i=0; t[m-1+i]!='\0'; i++)
    {
        s[i] = t[m-1+i];
    }
    s[i] = '\0';
}

将以上代码替换原有的/* 你的代码将被嵌在这里 */部分即可。


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