在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);编译通过,^_^(窃喜) !
... 下一页