VSCode怎么写C乱码_VSCode C语言编码问题解决教程

乱码问题源于编码不一致,需统一VSCode文件编码、编译器输入输出编码及终端显示编码。首先将VSCode的files.encoding设为utf8,并转换已有文件为UTF-8;在tasks.json中为GCC添加-finput-charset=UTF-8和-fexec-charset=GBK(或UTF-8)以匹配源码与输出编码;在Windows终端运行chcp 65001切换为UTF-8代码页,或在settings.json中配置终端启动时自动执行该命令,确保终端与程序输出编码一致;跨平台项目建议全程使用UTF-8,避免因系统差异导致乱码;同时注意setlocale的使用场景,避免混淆源码编码与运行时编码。

vscode怎么写c乱码_vscode c语言编码问题解决教程

VSCode里写C语言遇到乱码,这事儿真挺让人抓狂的。说白了,它通常就是编码不一致惹的祸。核心解决思路是确保你的源代码文件编码、VSCode编辑器本身的编码设置、C/C++编译器的输入输出编码,以及你运行程序时所使用的终端(命令行)的显示编码,这几者之间能达成某种统一。最省心的办法,往往是让它们都向UTF-8靠拢,尤其是在现代开发环境中,UTF-8几乎是通用标准了。但如果你在Windows下,并且程序需要和系统默认的GBK(或GB2312)环境交互,那可能还需要一些特别的策略来桥接。

解决方案

解决VSCode中C语言乱码问题,我们需要从几个关键点入手,确保整个开发链条的编码一致性。这包括了VSCode的文件编码设置、C/C++编译器的编码参数,以及运行程序时所用终端的编码环境。

统一VSCode文件编码:

打开VSCode的设置(

Ctrl+,

File -> Preferences -> Settings

)。搜索

files.encoding

,将其设置为

utf8

。这是一个全局设置,确保新创建的文件默认就是UTF-8编码。对于已有的乱码文件,可以右下角点击编码类型(通常显示为UTF-8或GBK),选择“通过编码重新打开(Reopen with Encoding)”,然后选择正确的编码(比如GBK),如果内容正常了,再选择“通过编码保存(Save with Encoding)”,保存为UTF-8。这样就将旧文件转换成了UTF-8。建议勾选

files.autoGuessEncoding

,让VSCode尝试自动识别文件编码,但这并非万能,手动设置更可靠。

配置C/C++编译器编码(以GCC/MinGW为例):

立即学习“C语言免费学习笔记(深入)”;

你需要修改编译任务(通常是

.vscode/tasks.json

)或者C/C++插件的配置。在GCC/MinGW的编译命令中,加入编码相关的参数:

-finput-charset=UTF-8

:告诉编译器你的源代码文件是UTF-8编码的。

-fexec-charset=GBK

-fexec-charset=UTF-8

:这决定了程序运行时输出到控制台的字符编码。如果你在Windows下使用默认的CMD/PowerShell(它们通常是GBK编码),那么

-fexec-charset=GBK

可能更合适,这样程序输出的GBK字符就能被终端正确显示。如果你的终端环境已经配置为UTF-8,那么使用

-fexec-charset=UTF-8

会更一致。示例(

tasks.json

command

部分):

"command": "gcc -g ${file} -o ${fileDirname}\${fileBasenameNoExtension}.exe -finput-charset=UTF-8 -fexec-charset=GBK",

请根据你的实际需求选择

-fexec-charset

的参数。

设置终端编码:

Windows CMD/PowerShell: 默认编码是GBK(代码页936)。要使其支持UTF-8,可以在每次运行程序前输入

chcp 65001

。你可以在

tasks.json

command

中,在实际编译命令前加上这个命令:

"command": "chcp 65001 && gcc -g ${file} -o ${fileDirname}\${fileBasenameNoExtension}.exe -finput-charset=UTF-8 -fexec-charset=UTF-8",

注意,如果终端设置为UTF-8(

chcp 65001

),那么编译器的

-fexec-charset

也应该设置为

UTF-8

,这样才能保持一致。

或者,你可以在VSCode的

settings.json

中配置集成终端的启动命令,让它每次启动时都执行

chcp 65001

"terminal.integrated.profiles.windows": {    "PowerShell": {        "source": "PowerShell",        "icon": "terminal-powershell",        "args": ["-NoExit", "/c", "chcp 65001"] // For PowerShell    },    "Command Prompt": {        "path": "cmd.exe",        "args": ["/k", "chcp 65001"] // For CMD    }},"terminal.integrated.defaultProfile.windows": "PowerShell" // 或 "Command Prompt"

Git Bash / WSL / Linux / macOS: 这些终端环境通常默认就是UTF-8,所以问题相对较少。如果遇到乱码,检查一下

LANG

环境变量,确保它包含

UTF-8

(例如

en_US.UTF-8

)。

为什么VSCode C语言代码会显示乱码?

说实话,乱码这东西,它不是凭空出现的,背后总有那么几条“编码不一致”的线索。在VSCode里写C语言遇到乱码,通常可以归结为以下几个核心原因:

首先,最常见的就是文件本身的编码与VSCode编辑器解读方式不符。你可能在某个默认GBK的环境下创建了C文件,或者从某个老项目拷贝过来,文件内容实际是GBK编码。但VSCode默认或你设置为UTF-8来打开它,那它就懵了,把GBK的字节序列当成UTF-8来显示,结果自然就是一堆奇奇怪怪的符号。反过来也一样,如果文件是UTF-8,但VSCode被强制用GBK去读,也会乱。

其次,是源代码编码与编译器期望的输入编码不匹配。我们写代码,尤其是涉及到中文字符串字面量的时候,比如

printf("你好,世界!");

,这些字符在源代码文件中是以某种编码形式存在的。当你把这个文件交给GCC这样的编译器处理时,编译器需要知道它应该用哪种编码来解析这些字符。如果源代码是UTF-8,但编译器却默认按GBK去读(或者没有明确告知),那么它在处理字符串字面量时就会出错,导致编译出来的程序在运行时输出乱码。

再者,也是非常关键的一点,是程序运行时输出的编码与终端显示编码不一致。你的C程序编译后,运行时会向标准输出(通常是你的命令行终端)打印字符。这些字符在程序内部是以某种编码形式(比如GBK或UTF-8)生成的。但如果你的终端(比如Windows的CMD)默认是GBK,而程序却试图输出UTF-8字符,那终端就无法正确解释这些UTF-8字节,于是,你看到的又是一片乱码。反之亦然,如果程序输出GBK,但终端被强制设置为UTF-8,同样会乱。这就像两个人说不同语言,却指望对方能听懂一样。

简单来说,乱码就是“鸡同鸭讲”的数字世界版本。文件、编辑器、编译器、终端,它们之间只要有一个环节的编码约定不一致,整个链条就可能断裂,最终呈现在你眼前的就是那些让人头疼的“?”或者方块。

如何统一VSCode、编译器和终端的编码设置?

要彻底解决C语言乱码问题,核心在于“统一”。我们得把VSCode、编译器和终端这三个环节的编码设置都捋顺了,让它们彼此能“说同一种语言”。

首先,VSCode文件编码的统一。这是最直观的。打开VSCode的设置(

Ctrl + ,

),找到

files.encoding

,我个人强烈建议你把它设为

utf8

。这是一个现代且通用的选择,能最大程度避免跨平台问题。对于已经存在的代码文件,如果它现在显示乱码,那很可能是它并非UTF-8编码。你可以点击VSCode右下角的编码提示(比如可能显示

GBK

UTF-8

),选择“通过编码重新打开”,尝试

GBK

GB2312

Big5

,直到内容正常显示。一旦正常,立即选择“通过编码保存”,并选择

UTF-8

。这样,你的所有源代码文件就都统一到UTF-8了。记得勾选

files.autoGuessEncoding

,让VSCode尝试智能识别,但别完全依赖它,它有时也会犯迷糊。

码上飞 码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

码上飞 138 查看详情 码上飞

接下来,C/C++编译器的编码配置。以最常用的GCC/MinGW为例,你需要告诉它你的源代码是UTF-8,并且程序运行时输出的字符应该用什么编码。这通常在

.vscode/tasks.json

里配置你的编译任务时完成。比如,你的

command

字段可能是这样的:

"command": "gcc -g ${file} -o ${fileDirname}\${fileBasenameNoExtension}.exe -finput-charset=UTF-8 -fexec-charset=GBK",

这里的关键是:

-finput-charset=UTF-8

:这告诉GCC,它正在读取的C源文件(

*.c

)是UTF-8编码的。这样,源代码中的中文字符串字面量就能被正确解析。

-fexec-charset=GBK

:这决定了你的程序在运行时,如果使用

printf

等函数输出中文字符串,这些字符串会被转换成GBK编码。这个参数的选择非常重要,它需要和你的终端显示编码匹配。如果你在Windows下使用默认的CMD或PowerShell,它们通常是GBK编码环境,那么输出GBK字符就能被正确显示。

最后,也是很多新手容易忽略的,终端的编码环境。你的程序编译运行后,会把结果输出到终端。如果终端的显示编码和程序输出的编码不一致,那肯定又是一堆乱码。在Windows上,CMD和PowerShell默认是GBK(代码页936)。为了让它们能正确显示UTF-8字符,你需要在运行程序前执行

chcp 65001

命令。这个命令会将当前终端的代码页设置为UTF-8。你可以选择两种方式来应用它:

tasks.json

command

中添加前缀:

"command": "chcp 65001 && gcc -g ${file} -o ${fileDirname}\${fileBasenameNoExtension}.exe -finput-charset=UTF-8 -fexec-charset=UTF-8",

注意,如果这里你用了

chcp 65001

,那么编译器的

-fexec-charset

也应该改为

UTF-8

,这样程序输出UTF-8,终端也显示UTF-8,完美匹配。

配置VSCode集成终端的启动参数:

settings.json

中,你可以为Windows的PowerShell或CMD配置一个启动脚本,让它们每次启动时都自动执行

chcp 65001

"terminal.integrated.profiles.windows": {    "PowerShell_UTF8": {        "path": "pwsh.exe", // 或 "powershell.exe"        "args": ["-NoExit", "-Command", "chcp 65001"],        "icon": "terminal-powershell"    },    "Command Prompt_UTF8": {        "path": "cmd.exe",        "args": ["/k", "chcp 65001"],        "icon": "terminal-cmd"    }},"terminal.integrated.defaultProfile.windows": "PowerShell_UTF8" // 或者 "Command Prompt_UTF8"

这样,每次打开集成终端,它就已经是UTF-8模式了。

通过这些步骤,我们就能建立一个从源代码到编辑器,再到编译器,最后到终端的完整、统一的编码链路,大大减少乱码的发生。

处理C语言乱码时常见的误区和高级技巧有哪些?

处理C语言乱码,很多时候并不是一蹴而就的,它涉及的环节比较多,所以也容易踩坑。同时,也有一些更深入的技巧可以帮助我们更好地管理字符编码。

常见的误区:

只关注文件编码,忽略编译器或终端: 这是一个最常见的误区。很多人会把VSCode的文件编码设成UTF-8,看到文件里中文显示正常就觉得万事大吉了。结果一编译运行,终端还是乱码。这是因为文件编码只是解决了编辑器显示的问题,但编译器如何解析字符串字面量、程序如何输出字符,以及终端如何显示,这些都是独立但又相互关联的环节,缺一不可。盲目使用

setlocale

setlocale(LC_ALL, "");

这个函数确实能让C程序根据当前系统的本地化设置来处理字符,但这并非万能药。在Windows上,如果系统区域设置是中文(中国),那么

setlocale

通常会将本地化设置为GBK。如果你的源文件是UTF-8,并且程序输出也是UTF-8,那么

setlocale

反而可能导致输出到GBK终端的UTF-8字符再次乱码,因为它会尝试将UTF-8字符转换为GBK。它的作用是让程序适应系统环境,而不是强制统一编码。混淆源代码编码和运行时输出编码: 很多人以为只要源代码是UTF-8,程序输出就一定是UTF-8。但实际上,C语言的字符串字面量在编译阶段就已经被处理成某种编码形式(由编译器参数决定),并且

printf

等函数在输出时也可能根据

setlocale

或系统环境进行转换。所以,需要明确区分源代码文件本身的编码、编译器处理字符串字面量时的编码,以及程序运行时输出到终端的编码。

高级技巧:

使用宽字符和宽字符串(

wchar_t

L"字符串"

): 对于需要真正实现国际化或者处理多字节字符的C程序,直接使用

char

和普通字符串可能会非常麻烦。C标准库提供了宽字符类型

wchar_t

和对应的宽字符串字面量(

L"你好"

),以及

wprintf

wcslen

等宽字符函数。

#include #include  // For wchar_t and wprintf#include  // For setlocaleint main() {    setlocale(LC_ALL, ""); // 根据系统本地化设置    wprintf(L"你好,世界!");    return 0;}

使用

wchar_t

可以更好地处理不同编码的字符,但它需要与

setlocale

配合,并且输出到终端时,终端也需要支持相应的宽字符编码。在Windows下,

wchar_t

通常是UTF-16,而在Linux下通常是UTF-32。这增加了跨平台时的复杂性,但提供了更强大的字符处理能力。

深入理解

setlocale(LC_ALL, "")

这个函数会尝试将程序的本地化环境设置为操作系统当前的默认本地化。在中文Windows系统上,这通常意味着程序会按照GBK编码来处理字符。如果你希望程序在UTF-8环境下运行,并且输出也是UTF-8,那么你可能需要显式地设置

setlocale(LC_ALL, "en_US.UTF-8")

(在支持UTF-8的系统上,如Linux/macOS)或者不使用

setlocale

,而是通过编译器和终端设置来强制UTF-8。

跨平台项目优先UTF-8: 如果你的C项目需要在Windows、Linux、macOS等多个平台运行,那么从一开始就坚持所有源文件、所有输出都采用UTF-8是最佳策略。在Linux/macOS上,UTF-8是默认且普遍支持的。在Windows上,通过前面提到的编译器参数和终端

chcp 65001

来强制UTF-8。这样可以最大限度地减少平台间的编码差异。

tasks.json

中的环境变量和命令链:

tasks.json

中,你可以利用

options.env

来设置环境变量,或者使用

&&

操作符连接多个命令。例如,在Windows上,你可以在编译命令前先执行

chcp 65001

,确保后续的编译和运行都在UTF-8环境下。

// .vscode/tasks.json 示例{    "label": "build and run C (UTF-8 on Windows)",    "type": "shell",    "command": "chcp 65001 && gcc -g ${file} -o ${fileDirname}\${fileBasenameNoExtension}.exe -finput-charset=UTF-8 -fexec-charset=UTF-8 && ${fileDirname}\${fileBasenameNoExtension}.exe",    "options": {        "cwd": "${fileDirname}"    },    "group": {        "kind": "build",        "isDefault": true    },    "problemMatcher": "$gcc"}

这个例子中,

chcp 65001

先设置终端编码,然后

gcc

编译,最后运行编译好的程序,整个过程都在UTF-8环境下。

理解这些误区和技巧,能让你在遇到C语言乱码时,不再只是盲目尝试,而是能有条理

以上就是VSCode怎么写C乱码_VSCode C语言编码问题解决教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/464250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
DDPG Project「建议收藏」
上一篇 2025年11月8日 04:49:06
下一篇 2025年11月8日 04:49:16

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 怎么在PHP代码中实现图片上传功能_PHP图片上传功能实现与安全处理教程

    首先创建含enctype的HTML表单,再用PHP接收文件,检查目录、移动临时文件,验证类型与大小,生成唯一文件名,并调整php.ini限制以确保上传成功。 如果您尝试在PHP项目中添加图片上传功能,但服务器无法正确接收或保存文件,则可能是由于表单配置、文件处理逻辑或安全限制的问题。以下是实现该功能…

    2026年5月10日
    100
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • vscode上怎么运行html_vscode上运行html步骤【指南】

    首先保存文件为.html格式,再通过浏览器或Live Server插件打开预览;推荐安装Live Server实现本地服务器运行与实时刷新,提升开发体验。 在 VS Code 上运行 HTML 文件并不需要复杂的配置,只需几个简单步骤即可预览页面效果。VS Code 本身是一个代码编辑器,不直接运行…

    2026年5月10日
    100
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100
  • c#文件怎么打开

    打开 C# 文件有三种方法:Visual Studio:启动 Visual Studio,通过“文件”菜单打开 C# 文件。文本编辑器:使用文本编辑器打开 C# 文件,将其视为普通文本。.NET Core 命令行工具:使用 csc.exe 命令行工具编译 C# 文件,生成可执行文件。 如何打开 C#…

    2026年5月10日
    000
  • 创建指定大小并填充特定数据的Golang文件教程

    本文将介绍如何使用Golang创建一个指定大小的文件,并用特定数据填充它。我们将使用 `os` 包提供的函数来创建和截断文件,从而实现快速生成大文件的目的。示例代码展示了如何创建一个10MB的文件,并将其填充为全零数据。掌握这些方法,可以方便地在例如日志系统或磁盘队列等场景中,预先创建测试文件或初始…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 使用 WebCodecs VideoDecoder 实现精确逐帧回退

    本文档旨在解决在使用 WebCodecs VideoDecoder 进行视频解码时,实现精确逐帧回退的问题。通过比较帧的时间戳与目标帧的时间戳,可以避免渲染中间帧,从而提高用户体验。本文将提供详细的解决方案和示例代码,帮助开发者实现精确的视频帧控制。 在使用 WebCodecs VideoDecod…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000
  • Discord.py 交互按钮超时与持久化解决方案

    本教程旨在解决Discord.py中交互按钮在一段时间后出现“This Interaction Failed”错误的问题。我们将深入探讨视图(View)的超时机制,并提供通过正确设置timeout参数以及利用bot.add_view()方法实现按钮持久化的具体方案,确保您的机器人交互功能稳定可靠,即…

    2026年5月10日
    000
  • Debian Copilot的社区活跃度如何

    debian copilot是codeberg社区维护的ai助手,旨在为debian用户提供服务。尽管搜索结果中没有直接提供关于debian copilot社区支持活跃度的具体数据,但我们可以通过debian社区的整体活跃度和特点来推断其活跃性。 Debian社区的一般情况: Debian拥有详尽的…

    2026年5月10日
    000
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200

发表回复

登录后才能评论
关注微信