You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用C语言system("Title Something")可修复CMD的ANSI颜色显示?

CMD中ANSI颜色失效与system("Title")的关联问题

开发命令行工具时发现一段必须保留的代码:

// 我必须保留这段代码,但不知道原因!!!!
system("Title Something");

移除这段代码后,VS Code模拟控制台运行工具一切正常,但在CMD中,代码里的ANSI颜色全部失效。

测试验证

搭建测试项目验证现象:
无system语句的代码:

#include <stdio.h>
int main(){
  printf("\033[1;31mI am red!\033[0m");
}

CMD运行输出:

C:\tests\ANSI-test>hello
←[1;31mI am red!←[0m

添加system("Title Something");后的代码(需引入stdlib.h):

#include <stdio.h>
#include <stdlib.h>
int main(){
  system("Title Something");
  printf("\033[1;31mI am red!\033[0m");
}

此时CMD中ANSI颜色恢复正常:

C:\tests\ANSI-test>hello
I am red!                                                   (假设此文本为红色)

原因推测

  • system函数初始化了控制台相关组件,触发ANSI颜色生效
  • system通过调用WinAPI让终端支持颜色显示

原理说明

从Windows 10 TH2版本开始,Windows控制台原生支持ANSI/VT100转义序列,但默认并未启用。当调用system("Title ...")时,该命令会间接调用WinAPI修改控制台属性,顺带开启了ANSI转义序列的支持——这就是添加这条语句后颜色恢复正常的原因。

如果不想依赖system("Title"),可以直接通过WinAPI手动启用ANSI支持:

#include <windows.h>
#include <stdio.h>

int main() {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD dwMode = 0;
    GetConsoleMode(hOut, &dwMode);
    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hOut, dwMode);

    printf("\033[1;31mI am red!\033[0m");
    return 0;
}

内容的提问来源于stack exchange,提问作者Dimitur Karabuyukov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:47:55