Sprintf()的思考和引出的相关问题
来源:互联网 发布:亚马逊关键词优化 编辑:程序博客网 时间:2024/05/21 09:11
Sprintf()为什么不安全?
功能
头文件
原型
参数列表
/*例子*/
#include <stdio.h>//某个头文件
int
main ()
/*主函数“整数”类型*/
{
char
buffer [50];
/*“字符”类型的数组,下面共有50个元素。*/
int
n, a=5, b=3;
/*三个变量都为“整数”类型*/
n=
sprintf
(buffer,
"%d plus %d is %d"
, a, b, a+b);
/*赋予数值*/
printf
(
"[%s] is a string %d chars long\n"
,buffer,n);
/*“格式输出”*/
return
0;
/*“返回 零”
也就是程序正常退出*/
}
为什么不安全?
因为sprintf函数无法检查内存溢出问题
当以下的方式调用的时候会报错,内存溢出
char buffer [5];/*“字符”类型的数组,下面共有50个元素。*/
int n, a=5, b=3;/*三个变量都为“整数”类型*/
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);/*赋予数值*/
//printf ("[%s] is a string %d chars long\n",buffer,n);/*“格式输出”*/
如何解决?
sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险
---------------------------------------------------
1: fprintf()
#include <stdio.h>
int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如
对于其输出格式参数,和printf()一样.
fprintf()和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
在有些地方,有这样的定义:printf(...)=fprintf(stdout,...).
2:eg)
fprintf函数的用法!2007-12-13 21:46
fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...);
举例用法:
#include <stdio.h>
#include <process.h>
FILE *stream;
void main( void )
{
int i = 10;
double fp = 1.5;
char s[] = "this is a string";
char c = '\n';
stream = fopen( "fprintf.out", "w" );
fprintf( stream, "%s%c", s, c );
fprintf( stream, "%d\n", i );
fprintf( stream, "%f\n", fp );
fclose( stream );
system( "type fprintf.out" );
}
屏幕输出:
this is a string
10
1.500000
printf就是在屏幕打印出一段字符串来啊
原型是int printf( const char *format [, argument]... );
是标准输出。
3:printf、sprintf与fprintf 的用法区分
1.printf 是和标准输出文件(stdout)关联的,fprintf 则没有这个限制.
2.fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...);
3.sprintf是格式化输出到一个字符串,fprintf是格式化输出到一个stream,通常是到文件。
int
int
-----------------------------------------------------------------------------------
- Sprintf()的思考和引出的相关问题
- 台阶问题引出的递归和非递归的思考
- 关于百度MP3问题引出的思考.....
- 关于百度MP3问题引出的思考.....
- 一个小问题引出的有关CSS优先级的思考
- 168题引出的思考
- [Java]一个TCP文本上传相关的异常处理和偶然引出的中文编码问题
- forward和redirect引出的路径问题
- #引出的各种问题
- lambda引出的问题
- 由-128的补码引出的思考
- position相关问题的思考
- 从一个错误引出的思考
- "整数相加溢出"引出的思考
- 根据一个笔试题引出的思考
- 由互联网技术引出的一些思考
- 与cache相关的一些问题和思考
- 指针初始化引出的问题
- 操作DataGridView控件详解
- C标准I|O与Unbufferd I|o
- 视频编解码学习之三:变换,量化与熵编码
- C陷阱篇之常见手误
- xampp 启动后mysql 报 Error: MySQL shutdown unexpectedly. 错误
- Sprintf()的思考和引出的相关问题
- DataGridView控件的用法详解合集
- android项目打包为apk文件
- 关于typedef的用法总结
- jbpm4.4集成eclipse
- PHP扩展编写--windows 7 下
- 嵌入式linux的tftp安装配置及tftp命令用法
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- ubuntu下 c++代码调试需要使用-gstabs+选项