本题要求编写函数,将输入字符串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];
}
}
报错如下
【以下回答由 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';
}
将以上代码替换原有的/* 你的代码将被嵌在这里 */
部分即可。