#include<stdio.h>
#include<string.h>
int main()
{char a[85],b[80];
int m,n,i,k=0;
gets(a);
gets(b);
m=strlen(b);
n=strlen(a);
if(m>5) m=5;
for(i=n+1;i<n+m+1;i++)
{k++;
a[i]=b[k];
}
puts(a);
}
测试出错................
还有改的地方:i<m+n 最后再加上a[m+n]='\o'
追答不用改!你改成i<m+n就少了一次循环,最后的'\0'就拷贝不过去了,所以才得在最后加一句a[m+n]='\o'。b[]中最后自动放置了'\0',用n+m+1次循环,刚好把它拷贝到a[]的最后,这不就得了?你完全是知其然,不知其所以然!被人牵着走还以为是最好。我都说“余正确”了,那不是白说的,怎么不执行一下试试?
追问我试了,但是不确定.................
为什么会出现这种情况?
对b[]输入超过5个字符时代码截取了5,就破坏了b[]最后的'\0'。应该在这里把b[]字符串修正(见代码1)。或者把a[]初始化一下(a[85]="")也能奏效(见代码2)。
代码1:
void main(void){
char a[85],b[80];
int m,n,i,k=0;
gets(a);
gets(b);
m=strlen(b);
n=strlen(a);
if(m>5){
m=5;
b[m]='\0';
}
for(i=n;i<n+m+1;i++){
a[i]=b[k];
k++;
}
puts(a);
}
代码2:
void main(void){
char a[85]="",b[80];
int m,n,i,k=0;
gets(a);
gets(b);
m=strlen(b);
n=strlen(a);
if(m>5) m=5;
for(i=n;i<n+m+1;i++){
a[i]=b[k];
k++;
}
puts(a);
}
懂了!拜谢!唉,考虑问题还得细心啊!谢大神了!
追答懂了就好啊……
不过按你的代码的意思,如下写法则更好些——
void main(void){
char a[85],b[80];
int m,n,i,k=0;
gets(a);
gets(b);
b[5]='\0';
m=strlen(b);
n=strlen(a);
for(i=n;i<n+m+1;i++){
a[i]=b[k];
k++;
}
puts(a);
}
这样就省掉了无谓的判断什么的。有点好为人师了,供参考……