不使用strcat函数连接两个字符串

问题遇到的现象和发生背景

编一程序,将两个字符串连接起来,不要用strcat函数。我的输出结果为空,请问我的代码哪里错了?感谢解答!

问题相关代码,请勿粘贴截图
#include <stdio.h>
int main()
{
  char a[120]={0},b[120]={0};
  int i,m,n;
    scanf("%s",a);
  scanf("%s",b);
  for(i=0;a[i]!='\0';i++)
  {
    m++;
  }
  for(i=0;b[i]!='\0';i++)
  {
    n++;
  }
  for(i=0;i<=119;i++)
  {
    a[m+1]=b[n+1];
    m++;
    n++;
  }
  printf("%s",a);
}


img

你要理解你的思路,以及注意你代码的细节,尤其是数组操作,字符串操作
要注意知识点:
1:数组存储字符串,默认以'\0'终结
2:n长数组下标是从0~n-1啊
3:你定义比较大的内存,保证了数组不越界了,还好
4:注意连接时逻辑思路

img


int main()
{
    char a[120] = { 0 }, b[120] = { 0 };
    int i, m = 0, n =0;
    scanf("%s", a);
    scanf("%s", b);
    //注意 你这里求得是a的长度  而下标是从0开始 所以下一个赋值应该是a[m]
    for (i = 0; a[i] != '\0'; i++)
    {
        m++;
    }
    //注意 你这是想求b的长度  长度为n  则对应的下标应该是 0~n-1
    for (i = 0; b[i] != '\0'; i++)
    {
        n++;
    }
    for (i = 0; i <=n; i++) //你这里应该遍历b的字符串  从0~n,依次给加到a数组后面 b[n]是'\0' 直接加上
    {
        a[m] = b[i]; //这里就把b的字符赋值给a的后面了
        m++; //然后a最后位置后移
    }
    printf("%s", a);
}



你的m和n都没有初始化
话说,m和n根本就是没用的俩变量
你直接用i和j不好吗,你的m就等于i,n就等于j

for(i=0;a[i]!='\0';i++);
i--;
  for(j=0;b[j]!='\0';j++)
{
a[i++]=b[j];
}


写的好麻烦啊,mn也没初始化
strcat不能用,能不能使用strlen直接求字符串长度?

m=strlen(a);
n=strlen(b);
for(i=0;i<=119;i++)
  {
    a[m+i]=b[n+i];
  }