printf()函数是格式输出函数,请求printf()打印变量的指令取决与变量的类型.例如,在打印整数是使用%d符号,在打印字符是用%c 符号.这些符号被称为转换说明.因为它们指定了如何不数据转换成可显示的形式.下列列出的是ANSI C标准peintf()提供的各种转换说明.
转换说明及作为结果的打印输出
%a 浮点数、十六进制数字和p-记数法(C99)
%A 浮点数、十六进制数字和p-记法(C99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i 有符号十进制数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字0f的无符号十六进制整数
%X 使用十六进制数字0f的无符号十六进制整数
%% 打印一个百分号
使用printf ()函数
printf()的基本形式: printf("格式控制字符串",变量列表);
#include<cstdio>
int main()
{
//for int
int i=30122121;
long i2=309095024l;
short i3=30;
unsigned i4=2123453;
printf("%d,%o,%x,%X,%ld,%hd,%u\n",i,i,i,i,i2,i3,i4);//如果是:%l,%h,则输不出结果
printf("%d,%ld\n",i,i2);//试验不出%ld和%d之间的差别,因为long是4bytes
printf("%hd,%hd\n\n\n",i,i3);//试验了%hd和%d之间的差别,因为short是2bytes
//for string and char
char ch1='d';
unsigned char ch2=160;
char *str="Hello everyone!";
printf("%c,%u,%s\n\n\n",ch1,ch2,str);//unsigned char超过128的没有字符对应
//for float and double,unsigned and signed can not be used with double and float
float fl=2.566545445F;//or 2.566545445f
double dl=265.5651445;
long double dl2=2.5654441454;
//%g没有e格式,默认6位包括小数点前面的数,
//%f没有e格式,默认6位仅只小数点后面包含6位
//%e采用e格式,默认6位为转化后的小数点后面的6位
printf("%f,%e,%g,%.7f\n",fl,dl,dl,dl);
printf("%f,%E,%G,%f\n",fl,dl,dl,dl);//%F is wrong
printf("%.8f,%.10e\n",fl,dl);
printf("%.8e,%.10f\n\n\n",fl,dl);
//for point
int *iP=&i;
char *iP1=new char;
void *iP2;//dangerous!
printf("%p,%p,%p\n\n\n",iP,iP1,iP2);
//其他知识:负号,表示左对齐(默认是右对齐);%6.3,6表示宽度,3表示精度
char *s="Hello world!";
printf(":%s: \n:%10s: \n:%.10s: \n:%-10s: \n:%.15s: \n:%-15s: \n:%15.10s: \n:%-15.10s:\n\n\n",
s,s,s,s,s,s,s,s);
double ddd=563.908556444;
printf(":%g: \n:%10g: \n:%.10g: \n:%-10g: \n:%.15g: \n:%-15g: \n:%15.10g: \n:%-15.10g:\n\n\n",
ddd,ddd,ddd,ddd,ddd,ddd,ddd,ddd);
//还有一个特殊的格式%*.* ,这两个星号的值分别由第二个和第三个参数的值指定
printf("%.*s \n", 8, "abcdefgggggg");
printf("%*.*f \n", 3,3, 1.25456f);
return 0;
}
分享到:
相关推荐
内核层使用printk打印,应用层调用C库的printf打印。在内核层是调用不了文件系统中C库的printf只能用printk。 两者之间的一个显著区别在于printk允许通过指定一个标志来设置优先级(在include/linux/kern_levels.h...
在Linux内核编程中,`printk`是一个用于打印调试信息的重要函数,类似于C语言中的`printf`。本文将深入探讨`printk`格式化字符串的使用,特别是针对不同类型的变量选择正确的格式指定符,这对于理解和编写可靠的内核...
`printk`函数接收一个格式化字符串,类似于C语言中的`printf`,但它可以安全地在内核上下文中使用。基本调用形式如下: ```c printk(KERN_ALERT "这是级别为警报的打印信息:%d\n", value); ``` 这里的`KERN_ALERT...
在内核调试技术之中,简单的是printk的使用了,它的用法和C语言应用程序中的printf使用类似,在应用程序中依靠的是stdio.h中的库,而在linux内核中没有这个库,所以在linux内核中,使用这个printk要对内核的实现...
printk类似于用户空间的printf函数,但它是为内核设计的,可以安全地在内核模式下执行。它提供了多种日志级别,用于区分不同严重程度的信息,如KERN_EMERG(紧急情况)、KERN_ALERT(警报)、KERN_CRIT(严重)、...
在编程世界中,`printf`函数是C语言标准库中的一个关键成员,它用于格式化输出数据到标准输出设备,如显示器或打印机。这个函数基于`printf`家族,包括`fprintf`、`sprintf`等,它们都遵循类似的语法和规则。在...
首先,`printk`是Linux内核中用于打印调试信息的关键函数,类似于C语言中的`printf`。通过在代码中插入`printk`语句,开发者可以追踪程序执行的流程和状态。`printk`接受一个或多个参数,并允许在字符串前添加宏来...
printk 的功能与我们经常在应用程序中使用的 printf 是一样的,不同之处在于 printk 可以在打印字符串前面加上内核定义的宏,例如 KERN_ALERT、KERN_CRIT 等。这些宏是用来定义需要打印的字符串的级别。值越小,级别...
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录。...与printf类似,printk提供格式化输入功能,同时,它也具有所有LOG机制的
首先,printk是Linux内核中用于打印信息的主要函数,其使用方式与用户空间的printf函数类似。printk函数能够输出不同级别的信息到内核消息日志中,其中记录级别用数字0到7表示,数字越小表示级别越高,越紧急。在...
- 它的工作原理类似于用户空间中的`printf()`函数,但是具有更多的灵活性和控制选项。 #### 三、`printk()`函数详解 1. **基本用法**: - 基本语法:`printk(KERN_LEVEL "message");` - 其中`KERN_LEVEL`代表...
Printk函数运行在内核空间,printf函数运行在用户空间。Linux内核程序只能使用printk函数输出调试信息。 防止printk函数降低linux驱动性能 Linux驱动只在开发阶段使用printk函数输出消息。正式发布linux...
**1)** **使用内核函数printk**:printk类似于C语言中的printf函数,用于在内核空间打印消息,帮助开发者查看内核运行时的状态。与printf不同,printk能够安全地在内核环境中使用,且具备不同级别的日志输出控制,以...
`printk`是Linux内核中的一个日志打印函数,类似于C语言中的`printf`,它可以在内核运行过程中输出信息,帮助开发者追踪代码执行路径,检测变量状态,尤其是在没有图形化调试工具的情况下,`printk`起到了关键的诊断...
// 送格式化输出到一字符串中(在kernel/vsprintf.c,92 行)。 extern void init (void); // 函数原形,初始化(在168 行)。 extern void blk_dev_init (void); // 块设备初始化子程序(kernel/blk_drv/ll_rw_...
`printk()`是内核中非常重要的调试工具之一,它类似于用户空间的`printf()`函数,用于向内核日志系统发送消息。这些消息会被klogd守护进程捕获,并且最终写入到/var/log/messages文件中,也可以直接显示在控制台上。...