`
xuela_net
  • 浏览: 496671 次
文章分类
社区版块
存档分类
最新评论

puts()函数和printf函数的区别

 
阅读更多

puts()函数只用来输出字符串,没有格式控制,里面的参数可以直接是字符串或者是存放字符串的字符数组名。

printf()函数的输出格式很多,可以根据不同格式加转义字符,达到格式化输出。

puts()函数的作用与语句printf("%s\n",s);的作用形同。

例子:

#include<stdio.h>

intmain(void)
{
puts("Helloworldfromputs!");//字符串,最后隐含带有'\0'字符
}
Output
Helloworldfromputs!

main()
{
staticchara[]={'H','I','!','!'};
puts(a);
}
则输出Hi!!烫烫烫烫烫烫烫烫烫烫烫烫dhaklhdwuhdaghdagdak...(后面都是乱码)

原因:a在结尾处缺少一个空字符('\0'),所以它不是一个串,这样,puts()就不知道什么时候停止输出,它将会把a后面内存单元中的内容都打印出,直到它在什么地方碰到了一个空字符为止。


//==============
cathello.c
#include<stdio.h>
intmain(void)
{
printf("helloworld!\n");
}
//========================
gcc-Shello.c-ohello.s生成汇编代码
//========================
cathello.s
//=========================
.file"hello.c"
.section.rodata
.LC0:
.string"helloworld!"
.text
.globlmain
.typemain,@function
main:
leal4(%esp),%ecx
andl$-16,%esp
pushl-4(%ecx)
pushl%ebp
movl%esp,%ebp
pushl%ecx
subl$4,%esp
movl$.LC0,(%esp)
callputs//========这里不是printf
addl$4,%esp
popl%ecx
popl%ebp
leal-4(%ecx),%esp
ret
.sizemain,.-main
.ident"GCC:(GNU)4.1.2(Ubuntu4.1.2-0ubuntu4)"//=======gcc版本
.section.note.GNU-stack,"",@progbits

修改printf()的参数后

//==========================
#include<stdio.h>
intmain(void)
{
printf("helloworld!addr=0x%08x\n",printf);
}
//==========================
gcc-Shello.c
//======================
cathello.s
//===========.file"hello.c"
.section.rodata
.LC0:
.string"helloworld!addr=0x%08x\n"
.text
.globlmain
.typemain,@function
main:
leal4(%esp),%ecx
andl$-16,%esp
pushl-4(%ecx)
pushl%ebp
movl%esp,%ebp
pushl%ecx
subl$20,%esp
movl$printf,4(%esp)
movl$.LC0,(%esp)
callprintf//=================编译后的汇编代码已经是printf了
addl$20,%esp
popl%ecx
popl%ebp
leal-4(%ecx),%esp
ret
.sizemain,.-main
.ident"GCC:(GNU)4.1.2(Ubuntu4.1.2-0ubuntu4)"
.section.note.GNU-stack,"",@progbits
原因:puts()函数的作用与语句printf("%s\n",s);的作用形同。gcc可能对其进行了优化。

分享到:
评论

相关推荐

    学习puts函数和printf函数的区别.pdf

    学习puts函数和printf函数的区别.pdf

    puts学案函数和printf函数的区别.pdf

    puts学案函数和printf函数的区别.pdf

    在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈

    在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈,需要的朋友可以参考一下

    C输入输出库函数

    对myprintf函数,其功能与printf函数相同。但只要求支持简单的%c,%d,%s,%f,%lf格式说明。不要求域宽控制。 对myscanf函数,其功能与scanf函数相同。但只要求支持简单的%c,%d,%s,%f,%lf格式说明。

    UNIX/LINUX下C语言中文短信UCS2编码和解码函数源码

    发送中文短信,会用到UCS2编码,很多网友反应中文发送和接收乱码,这个烦恼可以解决了。 注意:要在系统配置里增加 LANG=zh_CN.GB18030 export LANG 语言配置不对,这个函数会出错的,另外,例子有点问题,换一个...

    吕鑫:最博大精深的C语言视频教程 第05天 【第1堂课】其他的C语言输入输出函数

    1、演示putchar和getchar函数的用法; 2、演示putch和getch函数的用法,讲解与putchar和getchar函数的区别; 3、演示puts和gets函数的用法,讲解与printf函数的关系;

    在桌面程序中使用Printf输出调试信息

    PeDbg的使用也非常的方便,直接将要调试的程序拉进去点击转换后,目标程序就能在控制台(CMD)下启动了, 这样可以用传统的Printf/puts(当然,从逻辑上来讲,其它语言编写的程序一样可以做到这样的功能)等函数直接将调试...

    -C++参考大全(第四版) (2010 年度畅销榜

    25.27 puts函数 25.28 remove函数 25.29 rename函数 25.30 rewind函数 25.31 scanf函数 25.32 setbuf函数 25.33 setvbuf函数 25.34 sprinff函数 25.35 sscanf函数 25.36 tmpfile函数 25.37 tmpnam函数 25.38 ungetc...

    printf

    档案: _printf.c-类似的printf函数_putchar.c-putchar函数,将字符c写入标准输出_puts.c-puts函数,将字符串输出至stdout转换器。c-将数字和基数转换为字符串get_flag.c-检查_printf的标志get_print.c-选择传递给_...

    C语言程序设计:运算符和表达式.pptx

    printf函数(格式输出函数) printf函数的一般格式;/*从最简单的学起 */ #include void main() { printf(“Hello World !” ); };格式字符 d格式符:输出十进制整数 %d格式:按数据实际长度输出。;%md格式:m指定...

    C语言程序设计标准教程

    即是把max调用的返回值又作为printf函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。 所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。 对此, 各系统的规定不一定...

    semihosting-cortexm-uos:Cortex-M 设备的简单半主机输出函数

    对于 printf,使用半主机直接通过调试接口输出的 puts 和 putchar 函数。 它们直接实现半主机调用,因此几乎没有依赖关系,并且与使用等效的内置函数(特别是 trace_puts 和 trace_putchar)相比,它们可能产生更小...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    printf函数:格式化输出函数 4 语句 5 计算并显示整数的差 5 格式化字符串和转换说明 6 符号的称呼 8 无格式化输出 8 字符串常量 10 转义字符 10 1-2 变量 11 变量和声明 11 赋值 12 初始化 13 声明时...

    FatFs的API函数中文介绍

    每个函数的说明,和举例应用 f_mount - 注册/注销一个工作区域(Work Area) f_open - 打开/创建一个文件f_close - 关闭一个文件 f_read - 读文件f_write - 写文件 f_lseek - 移动文件读/写指针 f_truncate - 截断...

    C语言讲义.doc

    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...

    C 程序指导书及实践指导

    1. 用printf函数来输入表达式运行结果 2. 程序试图计算由键盘输入的任意两个整数的平均值: [问题讨论] 1.“=”和“==”有什么区别? 2.“&”和“&&”、“|”和“||”有什么区别? 3. 如何正确地选用数据类型? ...

    指针函数字符串

    puts(str); } void exercise_three(); void exercise_three(){ char str[100]; printf("请输入字符串\n"); scanf("%s",str); //去掉重复的字符 char *ss = str; int nums[128] = {0}; /* for(int i = ...

    HookConsole.rar

    本VC6对话框工程用来Hook控制台的2个输出函数printf 和 puts

    C语言shuoming.chm

    数的用法完全一样, 区别在于cprintf()函数的输出受窗口限制, 而printf() 函 数的输出为整个屏幕。 cputs()函数输出一个字符串到屏幕上, 它与puts()函数用法完全一样, 只 是受窗口大小的限制。 putch()函数输出...

Global site tag (gtag.js) - Google Analytics