当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 在C语言中,我们如果希望进行格式化进行输出,一般我们用 sprintf 来字符串。
 

 

 ·简单加密解密原形    »显示摘要«
    摘要:´加密:´适用于任何字符,包括空格和url冲突的"&""?""%"汉字等符号´简单加密,可以改造成移位加密,比如每个字符asc码值增加或减少一个数字´可以改造成移位随机加密。´比如每个字符前有一个随机数字,表示该字符asc码值增加或减少这个随机数字function encode(x) for i=1 to len(x) tempn......
 ·代码生成工具 dao4j v1.00    »显示摘要«
    摘要:http://www.websamba.com/dao4j 自动生成java dao pattern 的jdbc源代码,提高开发效率。 ......


如何安全动态格式化字符串

在c语言中,我们如果希望进行格式化进行输出,一般我们用 sprintf 来字符串。

【相关文章:上传下载全攻略jspSmartUploa

例如: 【扩展阅读:万能表单处理程序

【扩展信息:一种理论上最快的Web数据库分页方法[转

char temp[100];

sprintf(temp, "%s", "helloworld"  );

通常上面的操作应该没有任何问题。但是,在某些情况下,是有意想不到的结果产生。

比如:在进行出错信息进行输出时,我们采取如下写法:

char temp[64];

sprintf( temp, "error at file %s , line %d , column %d , message: %s", strfile, linenumber, columnnumber, strmessage);

一般情况下,如果出错信息较少,上面程序没有任何问题,如果出错信息很长,上面的数据会越界,从而导致改写其他内存中的内容,引发一些你想象不到的错误。

这时,估计你的解决方案就是增大temp的空间,比如:temp[1000]。

没错,这样改正之后,造成上面出错的概率会较少很多,但是还没有完全解决此问题。

在用户如果提供比较多的出错信息时,还是有问题产生。

那么我们有没有办法来完全解决此问题呢????

在c++中,有个string类,可以用来动态存储字符串,它会根据当前字符串的长度来调整它的长度。

且string.begin() 相当于char*指针。

说到这,你是不是有一种冲动改写上面的程序?( i so ).

string strtemp;

strtemp.reserve(64); //优化string的内存分配策略

sprintf( strtemp.begin(), "error at file %s , line %d , column %d , message: %s", strfile, linenumber, columnnumber, strmessage);

编译通过,^_^(窃喜) ! 


...   下一页
 ·二分查找算法    »显示摘要«
    摘要:#include "stdio.h" int binarysearch(const int a[], int key, int n) { int low, mid, high; low = 0; high = n - 1; while(low <= high) { mid = (low + high) / 2; if(a[mid] < key) low = mid + 1; else if(a[mid......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE