#include
#include
void mystrcat(char a[],char b[]){//把a和b拼接起来?
int i=0,j=0;
//while(a[i++]!='\0');_
i--;//求解释啊!!!!!!!!!!
while(b[j]!='\0'){
a[i++]=b[j++];
}
a[i]='\0';
}
int main()
{
char a[100],b[100];
gets(a);
gets(b);
mystrcat(a,b);
puts(a);
return 0;
system("pause");
}
先把i移动到a数组的末尾然后再将b数组里面的元素挨个挨个的加到a数组里面去,最后赋上结束符 ,
但是这个搞法容易越界。可以用指针
理解这个题目的关键是: 字符数组隐含有一个元素 '\0' 用来标志字符串的结束。
假设a数组里保存的字符串是"john",b数组里保存的字符串是"tom",则:
a[0] = 'j', a[1] = 'o', a[2] = 'h', a[3] = 'n', a[4] = '\0'
b[0] = 't', b[1] = 'o', b[2] = 'm', b[3] = '\0'
然后看看函数是怎么执行的:
void mystrcat(char a[], char b[]) {
int i = 0, j = 0;
while (a[i++] != '\0') ; //循环a数组,当 i=4, 即a[4]='\0'时,判断为假,退出循环,注意因为有自增,所以此时i=5
i--; // i=5-1=4
while (b[j] != '\0') { //循环b数组,当 j=3, 即b[3]='\0'时,判断为假,退出循环。
a[i++] = b[j++]; //循环结果是这样的:
//a[4] = b[0] = 't',a[5] = b[1] = 'o',a[6] = b[2] = 'm',
}
a[i] = '\0'; //退出循环后i = 7,这句相当于 a[7] = '\0'
}
综上,a[0] = 'j', a[1] = 'o', a[2] = 'h', a[3] = 'n', a[4] = 't', a[5] = 'o', a[6] = 'm',a[7] = '\0'
这样,就得到"johntom",实现拼接。
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!
i--的意思就是 当while执行完了以后i对应的下标是'\0'的后一个。但是程序要正确i就要对应'\0',覆盖\0往后写字符。
这写法,越界咋整??