vscode运行c程序输出结果乱码,且运行不会停止,要手动关闭才可以。但是这个代码在visual c++却可以正常运行

vscode运行c程序输出结果乱码,且运行不会停止,要手动关闭才可以。但是这个代码在visual c++却可以正常运行
#include  <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include<stdbool.h>
#define SIZE 20

typedef struct Str{
    char elem[SIZE];
    int length;
}Str;

void StrAssign(Str *s,const char*chars){
    assert(s!=NULL);
    int len=strlen(chars);
    s->length=len;
    for(int i=0;i<len;i++){
        s->elem[i]=chars[i];
    }
}

void StrCpy(Str*s,Str*t){
    for(int i=0;i<t->length;i++){
        s->elem[i]=t->elem[i];
    }
    s->length=t->length;
}

int Getlength(Str *s){
    return s->length;
}

void Clear(Str *s){
    s->length=0;
}

bool SubStr(Str *sub,Str *s,int pos,int len){
    if(pos<0||len<1||pos>=s->length||pos+len>s->length-1){
        return false;
    }
    for(int i=pos;i<pos+len;i++){
        sub->elem[i-pos]=s->elem[i];
    }
    sub->length=len;
    return true;
}

bool Insert(Str *s,int pos,Str *t){
    assert(s!=NULL);
    assert(t!=NULL);
    if(pos<0||pos>s->length||pos+t->length>SIZE){
        return false;
    }
    for(int i=s->length-1;i>=pos;i--){
        s->elem[i+t->length]=s->elem[i];
    }
    for(int j=0;j<t->length;j++){
        s->elem[j+pos]=t->elem[j];
    }
    s->length+=t->length;
    return true;
}

int BF(Str *s,Str *sub,int pos){
    if(pos<0||pos>s->length){
        return -1;
    }
    int i=pos;
    int j=0;
    int lens=s->length;
    int lensub=sub->length;
    while(i<lens&&j<lensub){
        if(s->elem[i]==sub->elem[j]){
            i++;
            j++;
        }
        else{
            i=i-j+1;
            j=0;
        }
    }
    if(j>=lensub){
        return i-j;
    }
    else{
        return -1;
    }
}

bool DeletePos(Str* s,int pos,int len){
    assert(s!=NULL);
    if(pos<0||pos+len>s->length||len<0){
        return false;
    }
    for(int i=pos;i<s->length-len;i++){
        s->elem[i]=s->elem[i+len];
    }
    s->length-=len;
    return true;
}

bool Delete(Str *s,int pos,Str *t){
    assert(s!=NULL);
    assert(t!=NULL);
    if(pos<0||pos>s->length||t->length>s->length){
        return false;
    }
    int index=BF(s,t,pos);
    if(index<0){
        return false;
    }
    return DeletePos(s,index,t->length);
}

bool Replace(Str *s,Str *t,Str *v,int pos){
    assert(s!=NULL);
    assert(t!=NULL);
    assert(v!=NULL);
    int index=BF(s,t,pos);
    if(index<0){
        return false;
    }
    DeletePos(s,index,t->length);
    return Insert(s,index,v);
}

bool ReplaceAll(Str *s,Str *t,Str *v){
    assert(s!=NULL);
    assert(t!=NULL);
    assert(v!=NULL);
    while(Replace(s,t,v,0));
    return true;
}

void Show(Str *s){
    for(int i=0;i<Getlength(s);i++){
        printf("%c",s->elem[i]);
    }
    printf("\n");
}

int main(){
    Str s;
    char *s1="abcdefd";
    StrAssign(&s,s1);
    Show(&s);

    Str t;
    char *t1="cd";
    StrAssign(&t,t1);
    Show(&t);

    Str v;
    char *v1="zkr";
    StrAssign(&v,v1);
    Show(&v);
    ReplaceAll(&s,&t,&v);
    Show(&s);
    system("pause");
    return 0;
}
运行结果及报错内容

img

但是其他程序的中文输出结果却可以正常显示

img

百度了说用chcp转码也没用
希望大家帮帮我啊

既然中文字符乱码了 先解决乱码问题再说
都用utf8吧