写在前面
在操作数组的时候发生了一些意外,数组在存入数量比较小时必须要进行'\0'
闭合,否则会发生意外,被不知道什么牛马键入一些奇奇怪怪的东西,暂时我还不明白是怎么出来的。
原题如下
编写函数void strcopy(char s1[], char s2[], int m, int n)将s1串中下标m开始的n个子串拷贝到s2中,要求从键盘输入s1串,m和n,调用函数完成拷贝后输出s2.
主函数如下所示,请只提供子函数的编写:
void strcopy(char s1[], char s2[], int m, int n);
int main()
{ char s1[100],s2[100];
int m,n;
gets(s1);
scanf("%d%d",&m,&n);
strcopy(s1,s2,m,n);
}
看着很简单嘛
于是der
void strcopy(char s1[], char s2[], int m, int n)
{
int i,j;
j = 0;
for(i=m;i<m+n;i++)
s2[j++]=s1[i];
puts(s2);
}
结果
在起始下标是6,间隔>2时可以正确输出,而间隔在1,2时会崩溃
首先想的是:for循环写错了,单独把1,2拎出来还是错误
之后发现:数组在占用空间较小时会发生不可知变化(我比较憨还不知道为什么会这样,那些莫名出来的也不知道是哪个地址导出来的),于是添加了闭合按钮
最终代码
// children function
void strcopy(char s1[], char s2[], int m, int n)
{
int i,j;
j = 0;
for(i=m;i<m+n;i++)
s2[j++]=s1[i];
s2[j] = '\0';//闭合按钮'\0'
puts(s2);
}
以上