人間小林 2024-01-09 23:50 采纳率: 100%
浏览 10
已结题

在vscode中使用MinGW-w64 编译器执行c文件时,输入char型(%s)的中文无法被正常打印

1.问题
 最近发现我在vscode中使用MinGW-w64 编译器执行c文件时,输入char型(%s)的中文无法被正常打印。但是在Visual Studio 2022的终端使用命令行去执行同个文件,却可以正常输出。目前可以确定的是并不是由于c文件和终端的编码不同。我都统一了用UTF-8,其他的中文如果直接打印也都没有问题。所以我初步怀疑是不是MinGW-w64 编译器有问题,同样的代码在Visual Studio 2022自带的编译器里就没有问题。不知道大家有没有遇到一样的情况。
 于是我用以下的代码去试了几种情况。1是通过输入%s,后打印,2是直接打印中文汉字。剩下的几种就是英文日文这些。

2.环境
vscode:版本: 1.85.1 (user setup)
Visual Studio 2022:Visual Studio 2022 Developer Command Prompt v17.4.2
MinGW-w64 :gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0


3.代码

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

int main(void) {
    char name[32];
    printf("请输入您的名字:\n");
    scanf("%s", name);
    printf("%s\n", name);
    
    //获取name的ascii码
    int i;
    for (i = 0; i < strlen(name); i++) {
        printf("%d ", name[i]);
    }
    printf("\n");

    printf("Hello World!\n");
    printf("林\n");
    //获取林的ascii码
    char str[] = "林";
    for (i = 0; i < strlen(str); i++) {
        printf("%d ", str[i]);
    }
    printf("\n");
     printf("Hello World!\n");
    printf("为什么会这样呢?\n");
    printf("こんにちは\n");
    
    return 0;
}

4.结果
【在vscode中】

img

通过char型输入的汉字【林】,直接空白打印出来了?而且as码也是不正常的,貌似没有被正常获取。ps:每次重新执行获取的as码都是不一样!就很离谱

如果输入英文的话,是正常的。

img


【在Visual Studio 2022终端中】

img

这是正常的,汉字也被正确打印出来了。ASCII码也对上了。

想了许久也没想出来是哪里的问题,倒是在MinGW-w64的论坛上看见有日语提问者也遇到类似的问题。

链接:https://sourceforge.net/p/mingw-w64/bugs/943/

首先代码本身应该是没问题的,在在Visual Studio 2022中用自带的编译器是可以正常输出的,其次也可以排除编码不同的问题,在vscode中的输出 printf("为什么会这样呢?\n");都是正常的,如果出现常见的乱码问题,那将除了英文都会乱码的。还请各位帮忙接解疑!多谢了

  • 写回答

1条回答 默认 最新

  • 柯本 2024-01-10 09:00
    关注

    我机上有多个版本for windows 的gcc,gcc (tdm64-1) 4.9.2/gcc (tdm64-1) 9.2.0/gcc (GCC) 13.2.0,
    我测试了你的程序,都没有发现你的问题(我在WSL下的gcc (Ubuntu 9.4.0-1ubuntu1~20.04.3) 9.4.0同样没问题)

    img

    为此,我特地到sourceforge上下载了gcc 8.10,详细版本为gcc (x86_64-win32-sjlj-rev0, Built by MinGW-W64 project) 8.1.0,结果就是出现了你同样的问题

    img

    那么,问题很明显了,就是gcc 8.10的bug
    你更新下你的gcc 就应该没有问题了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月9日

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改