C语言中默认的printf打印都是一种颜色的,有时候为了突出显示其中的信息,避免重要的警告(warning)和错误(error)信息淹没在其他不重要的log中,有必要区别不同信息级别的字体颜色。
printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
printf("\033[47;31mThis is a color test.\033[0m");
47是字背景颜色, 31是字体的颜色, This is a color test.是字符串. \033[0m是控制码.
上述结果在Ubuntu里测试显示效果如下:
-- --
printf
在终端输出时改变
颜色
在调试程序时,有时候要输出大量数据,如果让
printf
/f
printf
改变输出数据的
颜色
,那观察数据就方便多了。 终端的字符
颜色
是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。转义序列是以 ESC 开头,可以用 /033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。 /033[显示方式;前景色
一、Linux下控制台文字上色的方法
Linux下控制台
颜色
是通过添加专用数字来选择的。这些数字夹在 "\e["和 "m"之间。如果指定一个以上的数字,则用分号将它们分开。
举几个例子:
(1)第一个数字(31)为前景
颜色
(红色);第二个数字为(42)背景
颜色
(绿色)
echo -e "\e[31;42m"
(2)使用"\e[0m"序列将
颜色
重新设置为正常值
echo -e "\e[0m" 或 echo -e "\033[0m"
(3)
颜色
对应关系如下所示:
\e[30m – \e[37m 设置前
2.10.2
printf
输出int值 23
2.10.3
printf
输出八进制和十六进制 23
2.10.4 short,long,long long,unsigned int 23
2.10.5 整数溢出 23
2.10.6 大端对齐与小端对齐 23
2.11 CHAR类型 24
2.11.1 char常量,变量 24
2.11.2
printf
输出char 24
2.11.3 不可
打印
char转义符 24
2.11.4 char和unsigned char 25
2.12 浮点FLOAT,DOUBLE,LONG DOUBLE类型 25
2.12.1 浮点常量,变量 25
2.12.2
printf
输出浮点数 25
2.13 类型限定 25
2.13.1 const 25
2.13.2 volatile 26
2.13.3 register 26
3 字符串格式化输出和输入 26
3.1 字符串在计算机内部的存储方式 26
3.2
PRINTF
函数,PUTCHAR函数 27
3.3 SCANF函数与GETCHAR函数 28
4 运算符表达式和语句 29
4.1 基本运算符 29
4.1.1 = 29
4.1.2 + 29
4.1.3 – 29
4.1.4 * 29
4.1.5 / 29
4.1.6 % 29
4.1.7 += 29
4.1.8 -= 29
4.1.9 *= 29
4.1.10 /= 30
4.1.11 %= 30
4.1.12 ++ 30
4.1.13 -- 30
4.1.14 逗号运算符 30
4.1.15 运算符优先级 30
4.2 复合语句 31
4.3 空语句 31
4.4 类型转化 31
5 条件分支语句 31
5.1 关系运算符 31
5.1.1 < 31
5.1.2 <= 31
5.1.3 > 32
5.1.4 >= 32
5.1.5 == 32
5.1.6 != 32
5.2 关系运算符优先级 32
5.3 逻辑运算符 32
5.3.1 && 32
5.3.2 || 32
5.3.3 ! 33
5.4 IF 33
5.5 IF ELSE 34
5.6 IF ELSE IF 34
5.7 SWITCH与BREAK,DEFAULT 35
5.8 条件运算符? 36
5.9 GOTO语句与标号 36
6 循环语句 36
6.1 WHILE 36
6.2 CONTINUE 37
6.3 BREAK 37
6.4 DO WHILE 37
6.5 FOR 37
6.6 循环嵌套 37
7 数组 38
7.1 一维数组定义与使用 38
7.2 数组在内存的存储方式 38
7.3 一维数组初始化 38
7.4 二维数组定义与使用 39
7.5 二维数组初始化 39
8 字符串与字符数组 39
8.1 字符数组定义 39
8.2 字符数组初始化 39
8.3 字符数组使用 40
8.4 随机数产生函数RAND与SRAND 40
8.5 用SCANF输入字符串 40
8.6 字符串的结束标志 41
8.7 字符串处理函数 41
8.7.1 gets 41
8.7.2 fgets函数 41
8.7.3 puts函数 42
8.7.4 fputs函数 42
8.7.5 strlen,字符串长度 42
8.7.6 strcat,字符串追加 42
8.7.7 strncat,字符串有限追加 43
8.7.8 strcmp,字符串比较 43
8.7.9 strncmp,字符串有限比较 43
8.7.10 strcpy字符串拷贝 43
8.7.11 strncpy字符串有限拷贝 43
8.7.12 s
printf
,格式化字符串 43
8.7.13 Sscanf函数 44
8.7.14 strchr查找字符 44
8.7.15 strstr查找子串 44
8.7.16 strtok分割字符串 44
8.7.17 atoi转化为int 45
8.7.18 atof转化为float 45
8.7.19 atol转化为long 45
9 函数 45
9.1 函数的原型和调用 45
9.2 函数的形参与实参 45
9.3 函数的返回类型与返回值 46
9.4 MAIN函数与EXIT函数与函数的RETURN语句 46
9.5 多个源代码文件程序的编译 47
9.5.1 头文件的使用 47
9.5.2 #include与#define的意义 47
9.5.3 #ifndef与#endif 47
9.6 函数的递归 48
9.6.1 递归的过程分析 48
9.6.2 递归的优点 52
9.6.3 递归的缺点 52
1 指针 52
1.1 指针 52
1.1.1 指针的概念 52
1.1.2 指针变量的定义 52
1.1.3 &取地址运算符 52
1.1.4 无类型指针 52
1.1.5 NULL 53
1.1.6 空指针与野指针 53
1.1.7 指针的兼容性 53
1.1.8 指向常量的指针与指针常量 54
1.1.9 指针与数组的关系 54
1.1.10 指针运算 54
1.1.11 通过指针使用数组元素 55
1.1.12 指针数组 55
1.1.13 指向指针的指针(二级指针) 55
1.1.14 指向二维数组的指针 57
1.1.15 指针变量做为函数的参数 57
1.1.16 一维数组名作为函数参数 57
1.1.17 二维数组名作为函数参数 58
1.1.18 const关键字保护数组内容 58
1.1.19 指针做为函数的返回值 58
1.1.20 指向函数的指针 59
1.1.21 把指向函数的指针做为函数的参数 60
1.1.22 memset,memcpy,memmove函数 61
1.1.23 指针小结 63
2 字符指针与字符串 64
2.1 指针和字符串 64
2.2 通过指针访问字符串数组 64
2.3 函数的参数为CHAR * 64
2.4 指针数组做为MAIN函数的形参 65
3 内存管理 65
3.1 作用域 65
3.1.1 auto自动变量 65
3.1.2 register寄存器变量 65
3.1.3 代码块作用域的静态变量 66
3.1.4 代码块作用域外的静态变量 66
3.1.5 全局变量 66
3.1.6 外部变量与extern关键字 66
3.1.7 全局函数和静态函数 66
3.2 内存四区 66
3.2.1 代码区 67
3.2.2 静态区 67
3.2.3 栈区 67
3.2.4 栈溢出 68
3.2.5 堆区 68
3.3 堆的分配和释放 70
3.3.1 malloc 70
3.3.2 free 70
3.3.3 calloc: 70
3.3.4 realloc 71
4 结构体,联合体,枚举与TYPEDEF 71
4.1 结构体 71
4.1.1 定义结构体struct和初始化 71
4.1.2 访问结构体成员 71
4.1.3 结构体的内存对齐模式 72
4.1.4 指定结构体元素的位字段 72
4.1.5 结构数组 72
4.1.6 嵌套结构 73
4.1.7 结构体的赋值 73
4.1.8 指向结构体的指针 73
4.1.9 指向结构体数组的指针 73
4.1.10 结构中的数组成员和指针成员 73
4.1.11 在堆中创建的结构体 74
4.1.12 将结构作为函数参数 74
4.1.13 结构,还是指向结构的指针 74
4.2 联合体 75
4.3 枚举类型 75
4.3.1 枚举定义 75
4.3.2 默认值 76
4.4 TYPEDEF 76
4.5 通过TYPEDEF定义函数指针 76
5 文件操作 77
5.1 FOPEN 77
5.2 二进制和文本模式的区别 77
5.3 FCLOSE 78
5.4 GETC和PUTC函数 78
5.5 EOF与FEOF函数文件结尾 78
5.6 F
PRINTF
,FSCANF,FGETS,FPUTS函数 78
5.7 STAT函数 78
5.8 FREAD和FWRITE函数 79
5.9 FREAD与FEOF 79
5.10 通过FWRITE将结构保存到二进制文件中 79
5.11 FSEEK函数 80
5.12 FTELL函数 80
5.13 FFLUSH函数 80
5.14 REMOVE函数 81
5.15 RENAME函数 81
6 基础数据结构与算法 82
6.1 什么是数据结构 82
6.2 什么是算法 82
6.3 排序 83
6.3.1 冒泡排序 83
6.3.2 选择排序 83
6.4 查找 83
6.4.1 顺序查找 83
6.4.2 二分查找 83
6.5 链表 84
6.5.1 单向链表定义 84
6.5.2 单向链表数据结构定义 85
6.5.3 单向链表的实现 85
在调试程序时,有时候要输出大量数据,如果让
printf
/f
printf
改变输出数据的
颜色
,那观察数据就方便多了.
终端的字符
颜色
是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关.
转义序列是以 ESC 开头,可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27).
\033[显示方式;前景色;背景色m
显示方式: 0(默认
0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)27(非反显)
前景色:30(黑色)、31(红色)、32(绿色)、33(黄色)、34(蓝色)、35(洋红)
前言终端的字符
颜色
由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。
本文主要介绍如何根据
打印
级别设置不同的
颜色
,方便调试。
在学习Linux网络编程的时候我们做了一个聊天系统,当时为了界面更漂亮点,于是搜索了下关于
printf
()函数的用法,和大家分享下:
给
printf
的输出加上些特效比如
颜色
,可以让
打印
信息更鲜明,在debug的时候特别有用。
#define NONE...
#include <stdio.h>
#define DBG_PRINT(format, arg...) do { f
printf
(stdout,"%ld,%d,[flash_sn]--- "format"\n",\
get_current_time(.
考虑以下应用场景或需求:用户希望看到的显示在终端的
打印
信息能够按
颜色
输出。比如,错误信息用红色输出,正确信息用绿色输出,普通信息则是常规输出。
如何做到呢?
printf
函数可以帮助做到这一点。
使用格式为:
printf
("\033[字背景
颜色
;字体
颜色
m字符串\033[0m" );
例如:
printf
("\033[47;31mhello world\033[