在Linux下提供了以下函数提供格式化输出,printf,fprintf,sprintf,snprintf。这些函数的头文件定义都是stdio.h。为标准的C库函数。

printf提供标准的输出流,fprintf往特定的流中写数据。前者比较常见,用的也较多。

sprintf格式化输入到字符指针缓冲,这个函数自动的加入null byte到缓冲,但是返回值不包括这个结束字节。

使用sprintf函数意缓冲溢出问题,用户要保证格式化数据的长度。

如下代码:

#include

int main(int argc,char *argv[])

{

char buffer[6];

sprintf(buffer,"%d",123456789);

printf("%s\n",buffer);

return 0;

}

gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)

下输出:123456789

buffer缓冲区,只有6个字节的长度,但是输出的数据却有9个字节,这个结果在一些情况下是不确定的,可能造成系统崩溃。

这个问题,在网络编程中,尤其要注意。接受客户端提交的数据,我们如果用这个函数来格式化,由于客户端的输入是不确定的,这对系统存在潜在的危险。如果,有提交的数据超过缓冲,可能造成系统出错。这就是缓冲区攻击的原理。

针对以上的问题,有个替代的函数snprintf。n表示格式化的长度。

以下代码:

#include

intmain(intargc,char*argv[])

{

charbuffer[6];

sprintf(buffer,"%d",123456789);

printf("%s\n",buffer);

return0;

}

printf linux 头文件,Linux C 格式化输出时要注意的问题相关推荐

  1. memset linux 头文件,linux中memset的正确用法

    [起因]希望对各种类型的数组进行初始化,避免野值 memset函数将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始 ...

  2. memset linux 头文件,linux下C/C++头文件梳理,看完这篇再也不会搞糊涂头文件了!...

    一:前言 进行linux下C/C++服务端后台开发的都知道,需要跟各种头文件打交道. 比如使用printf函数则需要引用#include ,使用STL的map容器则要#include ,使用socke ...

  3. timeval linux 头文件,linux中的struct timeval结构

    struct timeval { long tv_sec; // seconds long tv_usec; // and microseconds(百万分之一秒) }; timeval结构的用于指定 ...

  4. stricmp linux 头文件,linux windows porting

    10.error C4430: missing type specifier - int assumed. Note: C++ does not support default-int这是因为在VC6 ...

  5. linux头文件怎么编译,microsoft编译器怎么使用Linux头文件

    microsoft编译器如何使用Linux头文件? #include #include #include #include #include #include #include #include #i ...

  6. Linux C try 头文件,linux c 头文件

    //1.Linux中一些头文件的作用: #include //ANSI C.提供断言,assert(表达式) #include //GCC.GTK,GNOME的基础库,提供很多有用的函数,如有数据结构 ...

  7. Linux找头文件规则,linux 头文件、库文件查找顺序

    linux 头文件.库文件查找顺序 默认分类 2009-11-14 01:24:28 阅读126 评论0 字号:大中小 linux 头文件.库文件查找顺序 2009-11-03 12:36 Inclu ...

  8. linux 头文件汇总

    linux头文件 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下. <a.out.h& ...

  9. linux的头文件下载,Linux内核头文件(linux headers)

    更新 Linux 内核头文件(linux headers) 三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文 ...

最新文章

  1. Elastic Job从单点到高可用、同城主备、同城双活
  2. 细说Django的admin
  3. Windows 远程桌面管理
  4. saltstack(八):saltstack配置管理-安装配置启动tomcat样例
  5. gRPC源码分析(c++)
  6. [笔记]画三角函数-涵盖画图基础
  7. 全球及中国虚拟厨房(仅限外卖的餐厅)行业运营模式分析及发展规划建议研究报告2021-2027年版
  8. Python apply函数
  9. C#中提示:可访问性不一致:参数类型XXX比方法XXX的可访问性低
  10. 动手造轮子:实现一个简单的依赖注入(一)
  11. paip.输入法编程--词频调整原则--发音长度优先
  12. Vue中如何导入并读取Excel数据
  13. Flash桌球游戏开发
  14. Ubuntu 软件安装(网易云音乐,有道词典,flash插件)
  15. 磨砂服务器波特率修改,MOXA串口服务器产品配置说明 附图.doc
  16. html 字体模糊,详解css3使用transform出现字体模糊的解决办法
  17. 3.vue开发实例演示
  18. android女孩名字的由来,诗经中的女孩灵动名字 寓意深刻而又唯美
  19. html5拓扑图图入门,如何使用HTML5 Canvas动态的绘制拓扑图
  20. 计算机科学增刊是cscd吗,核心期刊增刊算核心吗?

热门文章

  1. python处理数据的包_在Python中利用Into包整洁地进行数据迁移的教程
  2. java int64如何定义_java – 具有两个int属性的自定义类的hashCode是什么?
  3. php程序员可能不了解的编程细节
  4. Android自绘制控件
  5. FZU Monthly-201903 获奖名单
  6. DataSet转化为DataTable
  7. 理解遗传算法循环交叉
  8. 2013.5.21号面试心得
  9. case 日期when 范围_多个日期段如何分组 case when convert等用法
  10. mysql语法6_全面接触SQL语法(6)_mysql