[Happy Coding] fprintf 不正确调用惹的祸
来源:互联网 发布:搬家公司软件 编辑:程序博客网 时间:2024/05/18 01:57
我们都知道C语言标准库操作文件写有一个函数叫做fprintf,用来写出字符串到文件里。这个函数如果不特别注意,会给我们带来很大的麻烦。
比如下面的代码段:
const char* outstring = "xxxxx";FILE* outfileH = fopen("test.txt", "w");if (!outfileH) { return false;}fprintf(outfileH, $outstring);fclose(outfileH);return true;
上面这段代码在大部分情况都能工作正常,但是如果outstring中包含"%",会给带来很大的麻烦。我想你已经知道原因了。
原因在于上面的fprintf函数调用方法不对,fprintf函数的第二个参数是字符串格式化方法的字符串,以%来标记格式化的策略,第三个参数之后的参数提供被格式化的内容列表。在上面的例子中,从第三个参数开始,我们都没有提供任何参数。如果outstring字符串中包含%s字符串,那么函数需要提供一个字符串,但是后面的参数列表中,我们并没有提供,那么函数内部就会按照参数压栈的顺序,往栈上面定位一个想要的字符串。然而这是非常危险的,要知道我们并没有提供任何被格式化的字符串作为参数,将它们压到栈中。程序就会访问非法的内存空间。
解决办法就是调用fwrite函数,而不是fprintf,如果上面并没有格式化输出的需求。
- [Happy Coding] fprintf 不正确调用惹的祸
- [Happy Coding] 一段调用STL算法的程序代码的效率分析
- Happy for Coding
- [Happy Coding] 关于system/exit/wait的解释
- [Happy Coding] 加速Windows GUI debug版本的编译
- [Happy Coding] 一个正则表达式,支持逻辑和关系运算符组成的表达式计算
- [Happy Coding] 只能new不能delete的基类实现方法
- [Happy Coding] delete p;而不是delete [] p; 真的会导致内存泄漏吗?
- [Happy Coding] 只用BIT操作,求解整型和浮点数的绝对值
- [Happy Coding] luabind 0.9.1版本尝试
- fprintf函数调用出core
- fprintf的用法
- fprintf的使用
- fprintf函数的用法
- fprintf的用法
- fprintf()的使用
- sprintf()、fprintf()的使用方法
- fscanf()、fprintf()的使用
- Java枚举enum
- 创新工场实习面试
- WinCE 6.0的CETK源代码编译
- 菜鸟在学编程__LSJ
- 【原创】开源中国阅读小记
- [Happy Coding] fprintf 不正确调用惹的祸
- JavaScript Math.sqrt() 函数
- Java图片压缩模板代码
- Mac OS X Android手机无法连接adb
- Android中多线程下载
- Android将第三方jar打包进apk
- IIS express 配置和500.22错误解决详解
- JavaScript Math.pow() 函数
- 安装交叉编译器