当前位置: 首页 > news >正文

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;

}0b1331709591d260c1c78e86d0c51c18.png

相关文章:

  • linux取消挂载并将分区释放,linux硬盘分区:分区,格式化,挂载,取消挂载,删除分区...
  • 服务器linux重启要多久,win2003或linux服务器一般多久重启一次
  • 系统无法使用ssh远程linux,如何ssh无法登录可以su切换的问题
  • linux提高其他线程优先级,如何在pthreads中增加线程优先级?
  • linux 硬盘报错日志,Linux内核I_O系统报错日志与硬盘故障对应关系.doc
  • linux 递归上传ftp,使用ftp递归地将文件放入远程服务器
  • linux下载ccle数据,对CCLE数据库可以做的分析--转载
  • linux 什么是io,Linux异步IO是什么?
  • linux基础实验报告6,Linux实验报告6参考解析.doc
  • c语言树的类型作用是什么,C语言数据的基本类型有哪些?
  • c语言作业二闰年,浙大版《C语言程序设计(第3版)》题目集 练习3-5 输出闰年 (15 分)...
  • 汇编语言与c 混合编程,汇编语言与C C 混合编程精选.ppt
  • c语言链式表,c语言实现数据结构中的链式表
  • socket双向通信c语言,WebSocket实现实时双向通信
  • 递归函数c语言求分段函数,Python 实现递归函数求解分段函数表达式;并解释递归函数其原理...