近期在做毕设,使用到了JsonCpp0.5.0版本号的源码!

依照网上的安装配置教程,搭建好环境后就能够使用了!

在这里就不浪费空间去将怎样搭建开发环境了!请大家去google一下就好了!

在解析一个Json文件时。程序总是在某个地方出错!

開始还以为是TXT文件的格式不正确,还特意找了一个json文件来搞!这时发下这个json文件却执行通过!

难道真的是文件的问题!我将我的TXT文件逐渐简化,可是还是出问题,而其问题不是出在我的代码中。难道是JsonCpp的源码出现了问题!真的不敢相信!!

我将源码载入到我的project文件里来,又一次调试执行,调试期定位到问题所在!

json_reader.cpp 中

bool
Reader::decodeDouble( Token &token )
{
double value = 0;
const int bufferSize = 32;
int count;
int length = int(token.end_ - token.start_);
if ( length <= bufferSize )
{
Char buffer[bufferSize];
memcpy( buffer, token.start_, length );
buffer[length] = 0;
count = sscanf( buffer, "%lf", &value );
}
else
{
std::string buffer( token.start_, token.end_ );
count = sscanf( buffer.c_str(), "%lf", &value );
} if ( count != 1 )
return addError( "'" + std::string( token.start_, token.end_ ) + "' is not a number.", token );
currentValue() = value;
return true;
}

问题事实上非常easy,就是数组訪问越界了!

将if中的推断语句改为 length < bufferSize就好了!

測试用例通过!正确的解析了!

最新文章

  1. 了解HTML锚点
  2. Disconf
  3. Elasticsearch——Date Math在索引中的用法详解
  4. 深入理解MySQL开发性能优化.pptx
  5. ASP.NET MVC 5 入门教程 (3) 路由route
  6. 计算openlayers两点之间的距离
  7. C# 打印多页tif
  8. JavaScript 问答 - No.1
  9. hdu1588之经典矩阵乘法
  10. linux apt-get 源配置
  11. Python数据结构之栈的实现
  12. Linux基础实操六
  13. Linux——入门命令
  14. delphi图片欣赏
  15. 前端框架VUE
  16. (转)C#制作一个消息拦截器
  17. spring ioc 注解配置
  18. 【ocp新题】OCP 12c 062认证考试出现大量新题-8
  19. c++11 继承控制:final和override
  20. Vim的使用 区域选择

热门文章

  1. django开发微信公众平台遇到的问题记录
  2. js兼容性——获取当前浏览器窗口的宽高
  3. 封装HttpClient进行http请求与https请求
  4. js如何实现php的in_array()
  5. 【codeforces 810C】Do you want a date?
  6. Tomcat远程代码执行漏洞(CVE-2017-12615)修复
  7. Maven导入ojdbc14.jar和ojdbc6.jar
  8. Request的getParameter和getAttribute方法的差别
  9. ElasticSearch Shard——本质上是做分布式扩展,副本对于集群的稳定性有很强的影响
  10. 记录一下c++的一点指针所得