printf linux 头文件,Linux C 格式化输出时要注意的问题
在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 格式化输出时要注意的问题相关推荐
- memset linux 头文件,linux中memset的正确用法
[起因]希望对各种类型的数组进行初始化,避免野值 memset函数将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始 ...
- memset linux 头文件,linux下C/C++头文件梳理,看完这篇再也不会搞糊涂头文件了!...
一:前言 进行linux下C/C++服务端后台开发的都知道,需要跟各种头文件打交道. 比如使用printf函数则需要引用#include ,使用STL的map容器则要#include ,使用socke ...
- timeval linux 头文件,linux中的struct timeval结构
struct timeval { long tv_sec; // seconds long tv_usec; // and microseconds(百万分之一秒) }; timeval结构的用于指定 ...
- stricmp linux 头文件,linux windows porting
10.error C4430: missing type specifier - int assumed. Note: C++ does not support default-int这是因为在VC6 ...
- linux头文件怎么编译,microsoft编译器怎么使用Linux头文件
microsoft编译器如何使用Linux头文件? #include #include #include #include #include #include #include #include #i ...
- Linux C try 头文件,linux c 头文件
//1.Linux中一些头文件的作用: #include //ANSI C.提供断言,assert(表达式) #include //GCC.GTK,GNOME的基础库,提供很多有用的函数,如有数据结构 ...
- Linux找头文件规则,linux 头文件、库文件查找顺序
linux 头文件.库文件查找顺序 默认分类 2009-11-14 01:24:28 阅读126 评论0 字号:大中小 linux 头文件.库文件查找顺序 2009-11-03 12:36 Inclu ...
- linux 头文件汇总
linux头文件 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下. <a.out.h& ...
- linux的头文件下载,Linux内核头文件(linux headers)
更新 Linux 内核头文件(linux headers) 三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文 ...
最新文章
- Elastic Job从单点到高可用、同城主备、同城双活
- 细说Django的admin
- Windows 远程桌面管理
- saltstack(八):saltstack配置管理-安装配置启动tomcat样例
- gRPC源码分析(c++)
- [笔记]画三角函数-涵盖画图基础
- 全球及中国虚拟厨房(仅限外卖的餐厅)行业运营模式分析及发展规划建议研究报告2021-2027年版
- Python apply函数
- C#中提示:可访问性不一致:参数类型XXX比方法XXX的可访问性低
- 动手造轮子:实现一个简单的依赖注入(一)
- paip.输入法编程--词频调整原则--发音长度优先
- Vue中如何导入并读取Excel数据
- Flash桌球游戏开发
- Ubuntu 软件安装(网易云音乐,有道词典,flash插件)
- 磨砂服务器波特率修改,MOXA串口服务器产品配置说明 附图.doc
- html 字体模糊,详解css3使用transform出现字体模糊的解决办法
- 3.vue开发实例演示
- android女孩名字的由来,诗经中的女孩灵动名字 寓意深刻而又唯美
- html5拓扑图图入门,如何使用HTML5 Canvas动态的绘制拓扑图
- 计算机科学增刊是cscd吗,核心期刊增刊算核心吗?
热门文章
- python处理数据的包_在Python中利用Into包整洁地进行数据迁移的教程
- java int64如何定义_java – 具有两个int属性的自定义类的hashCode是什么?
- php程序员可能不了解的编程细节
- Android自绘制控件
- FZU Monthly-201903 获奖名单
- DataSet转化为DataTable
- 理解遗传算法循环交叉
- 2013.5.21号面试心得
- case 日期when 范围_多个日期段如何分组 case when convert等用法
- mysql语法6_全面接触SQL语法(6)_mysql