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

如何在C语言中实现跨平台彩色文本输出?遇字符报错求助

C语言跨平台打印彩色文本解决方案

一、解决编译错误问题

你遇到的" is not a valid universal character"错误,是因为C语言标准中不支持直接使用\u001b这种Unicode转义序列表示ASCII控制字符。只需将其替换为八进制的\033或十六进制的\x1b即可解决,这两个转义字符都对应ANSI转义的起始控制字符。

二、处理Windows平台ANSI转义不生效问题

Windows默认控制台不解析ANSI转义码,需要调用系统API开启该功能。以下是完整的跨平台实现代码:

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

// 启用Windows控制台的ANSI转义支持
void enable_ansi_colors() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hConsole == INVALID_HANDLE_VALUE) return;

    DWORD mode = 0;
    if (!GetConsoleMode(hConsole, &mode)) return;

    mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hConsole, mode);
}
#endif

// 定义颜色控制宏
#define FORE_BLACK   "\033[30m"
#define FORE_RED     "\033[31m"
#define FORE_GREEN   "\033[32m"
#define FORE_YELLOW  "\033[33m"
#define FORE_BLUE    "\033[34m"
#define FORE_MAGENTA "\033[35m"
#define FORE_CYAN    "\033[36m"
#define FORE_WHITE   "\033[37m"
#define RESET_COLOR  "\033[0m"

int main() {
#ifdef _WIN32
    enable_ansi_colors();
#endif

    printf("%s黑色文本%s\n", FORE_BLACK, RESET_COLOR);
    printf("%s红色文本%s\n", FORE_RED, RESET_COLOR);
    printf("%s绿色文本%s\n", FORE_GREEN, RESET_COLOR);
    printf("%s默认文本\n", RESET_COLOR);

    return 0;
}

代码说明

  • 条件编译:通过#ifdef _WIN32区分Windows平台,仅在该平台下执行ANSI转义启用逻辑;Linux、macOS等平台默认支持ANSI转义,无需额外处理。
  • 颜色宏定义:用宏封装ANSI转义码,便于调用和维护。
  • 重置颜色:每次打印彩色文本后,务必使用RESET_COLOR恢复默认样式,避免后续输出继承当前颜色设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:40:51