C语言程序在VS2019不报错但是结果是乱码

题目要求:把两个字符串连接在一起

#include<stdio.h>
#include<string.h>

void link(char a[50], char b[50]);

int main()
{
    char c[50], d[50];
    printf("请输入想要连接的两个字符串\n");
    
    link(c,d);


    printf("结果为%ch\n", c);
    return 0;
};

void link(char a[50], char b[50]) {
    scanf("%s", a);
    scanf("%s", b);
    int i,n,m;
    int j = 0;
    n=strlen(a);
    m=strlen(b);
    for (i = n; j < m-1; i++,j++) {
        a[i] = b[j];
    }
    return;
}

结果如图
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/203582964036144.png '调2.png')


已修改

#include <stdio.h>
#include <string.h>
void link(char a[50], char b[50]);
int main()
{
    char c[50], d[50];
    printf("请输入想要连接的两个字符串\n");
    link(c, d);

    printf("结果为%s\n", c);
    return 0;
};
void link(char a[50], char b[50])
{
    scanf("%s", a);
    scanf("%s", b);
    int i, n, m;
    int j = 0;
    n = strlen(a);
    m = strlen(b);
    for (i = n; j < m; i++, j++)
    {
        a[i] = b[j];
    }
    return;
}

你的输出应为%s,且你的字符串复制没有复制最后一位

img

修改如下,问题见注释:

#include<stdio.h>
#include<string.h>
void link(char a[50], char b[50]);
int main()
{
    char c[50], d[50];
    printf("请输入想要连接的两个字符串\n");
    link(c, d);

    printf("结果为%s\n", c);//printf("结果为%ch\n", c);
    return 0;
};
void link(char a[50], char b[50]) {
    scanf("%s", a);
    scanf("%s", b);
    int i, n, m;
    int j = 0;
    n = strlen(a);
    m = strlen(b);
    for (i = n; j < m ; i++, j++) {//for (i = n; j < m-1 ; i++, j++)
        a[i] = b[j];
    }
    a[i] = '\0';//字符串结束标志
    return;
}