c语言的输出问题,不知道为什么

不知道为什么在输出时出现中文
c语言的输出问题,不知道为什么

运行软件:VS Code

img

应该是因为下标的使用方式的原因,以及字符数组m和n最后一个字符位置后面没加空字符'\0'.如果程序是要实现把一个字符串分开存入两个字符数组,再连接后打印,数组的下标变量可以使用两个变量分开表示,修改如下:

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

int main(void){
    
    char n[80];
    char m[80];
    char ch;
    
    int nlen=0; // 数组n的下标变量 
    int mlen=0;  // 数组m的下标变量 
    int i=0;  // 用于计算输入的字符个数 
    while((ch=getchar())!='\n'){
    //    static int i = 0;
        
        if(i<3){
            n[nlen]=ch; //前3个字符存入字符数组n中 
            nlen++;
        }else{    //第3个字符以后的字符存入字符数组m中        
            m[mlen]=ch;
            mlen++;
        }
        i++;    
    }
    
    n[nlen]='\0'; // 给字符数组n添加一个空字符 
    m[mlen]='\0'; // 给字符数组m添加一个空字符 
    //printf("nlen=%d,mlen=%d,n=%s,m=%s\n",nlen,mlen,n,m);
    
    char * sum;
    sum = strcat(m,n);  // 如果要以输入顺序连接,把n和m交换下位置即可
    printf("%s\n",sum);
    
    return 0;
}
 
 

img

因为你的n[0]=a ,n[1]=b ,n[2]=c, 然而你的 m[3]=d m[4]=e m[5]=f,但你m[0]到m[2]是未初始化的内容!!所以你将mn合起来时就有未定义内容,即是未定义的m[0] 到 m[2]