在C语言中,printf 和 snprintf 是用于格式化输出的常用函数。它们支持多种格式说明符,用于处理不同类型的数据。以下是这些函数常用的格式说明符及其组合类型的总结:
基本格式说明符 | 格式说明符 | 描述 |
|————|——————————–|
| %d | 有符号十进制整数 |
| %u | 无符号十进制整数 |
| %o | 八进制整数 |
| %x | 十六进制整数(小写字母) |
| %X | 十六进制整数(大写字母) |
| %f | 浮点数 |
| %e | 科学计数法(小写字母e) |
| %E | 科学计数法(大写字母E) |
| %g | 通用浮点格式(自动选择%f或%e) |
| %G | 通用浮点格式(自动选择%f或%E) |
| %c | 字符 |
| %s | 字符串 |
| %p | 指针地址 |
| %n | 写入的字符数(存储在参数中) |
| %% | 百分号本身 |
长度和精度修饰符 | 修饰符 | 描述 |
|————–|——————————–|
| h | 短整型(用于 %d, %o, %x, %u) |
| hh | char 类型(用于 %d, %o, %x, %u) |
| l | 长整型(用于 %d, %o, %x, %u, %f) |
| ll | 长长整型(用于 %d, %o, %x, %u) |
| L | 长双精度浮点型(用于 %f, %e, %g, %G) |
| .n | 精度(用于浮点数和字符串) |
| * | 宽度和精度由参数指定 |
组合示例
整数类型
• %d:有符号十进制整数
• %u:无符号十进制整数
• %o:八进制整数
• %x:十六进制整数(小写)
• %X:十六进制整数(大写)
• %hd:短整型
• %hu:无符号短整型
• %hhd:char 类型(有符号)
• %hhu:char 类型(无符号)
• %ld:长整型
• %lu:无符号长整型
• %lld:长长整型
• %llu:无符号长长整型
浮点类型
• %f:单精度浮点数
• %lf:双精度浮点数(通常与 %f 相同)
• %Lf:长双精度浮点数
• %e:科学计数法(小写e)
• %E:科学计数法(大写E)
• %g:通用浮点格式(自动选择 %f 或 %e)
• %G:通用浮点格式(自动选择 %f 或 %E)
• %.2f:保留两位小数的浮点数
• %10.2f:总宽度为10,保留两位小数的浮点数
字符和字符串
• %c:单个字符
• %s:字符串
• %.*s:动态指定长度的字符串
指针
• %p:指针地址
其他
• %n:写入的字符数(存储在参数中)
• %%:百分号本身
示例代码 1 2 3 4 5 #include <stdio.h> int main () {
int a = 123;
unsigned int b = 456;
char c = ‘A’;
float d = 123.456;
double e = 12345.6789;
char *str = “Hello, World!”;
void *ptr = &a;
printf(“a Integer: %d\n”, a); printf(“a Octal: %o\n”, a); printf(“a Hexadecimal (lower): %x\n”, a); printf(“a Hexadecimal (upper): %X\n”, a); printf(“a Short Integer: %hd\n”, (short)a);
printf(“b Unsigned Integer: %u\n”, b); printf(“b Unsigned Short Integer: %hu\n”, (unsigned short)b);
printf(“c Char[%%c,%%d]: %c, %d\n”, c, c); printf(“String[%%s]: %s\n”, str); printf(“Pointer[%%p]: %p\n”, ptr); printf(“Float[%%.2f]: %.2f\n”, d); printf(“Float[%%.3f]: %.3f\n”, d); printf(“Double:[%%.4lf] %.4lf\n”, e); printf(“Double:[%%.5lf] %.5lf\n”, e); printf(“Scientific Notation: %e\n”, e); printf(“General Format: %g\n”, e); printf(“Width and Precision: %10.2f\n”, d); printf(“Dynamic String Length: %.*s\n”, 5, str);
int chars_written; int ret = printf(“Number of characters written: %n\n”, &chars_written); // 注意:%n 不会输出任何内容,但会将写入的字符数存储在 chars_written 中
printf(“chars written:%d print return:%d\n”, chars_written,ret);
参考文档 如果你需要更详细的信息,可以参考以下官方文档:
GNU C Library (glibc) 文档 :
• printf
• snprintf
C标准库文档 :
• C11 Standard - The fprintf function
cppreference.com :
• std::printf
• std::snprintf
这些文档提供了详细的格式说明符及其用法,可以帮助你更深入地理解和使用 printf 和 snprintf 函数。