zoukankan      html  css  js  c++  java
  • 调试手记

     本来在做PC机MFC的程序,调试的一点问题没有之后再移植到装有WINCE5.0的SKY2440的开发板上的,但是程序写完之后发现有很多莫名其妙的问题。今天决定先做基本的Win32控制台程序,调试的没问题之后再进一步做有友好界面的MFC程序,最后再移植。

          关于strcpy()函数,说存在安全争议,于是我用strcpy_s()复制字符串。后者的第二个参数必须比实际字符串长度大1,即增加一个放结束符“\0”的位置。否则调试,当运行到这一函数时,程序会崩溃。下面是我的代码:

      size_t n=(*iter).size()+1;
      char* p=new char[n];
      strcpy_s(p,n,(*iter).c_str());
      strcpy_s(sceBuf[i].sceneryName,n,p);

    这一段代码实现的功能是将Vector里面的字符串传换为字符数组,注意要开辟新的字符空间,不要用原来字符数组的指针,这样容易造成野指针问题。

            虽然这个问题看起来很幼稚,但是当你写程序时,不小心犯了很幼稚的问题,你会格外珍惜的,至少我是这样。

    这一段出自

    getStoredPosition::getStoredPosition(void)
    {

     sceneryBuffer sceBuf[SCESIZE];
        double doub;
     int i=0;
        vector <string> vec;
     vector <string>::iterator iter;
     char ival[40];
     ifstream inFile("storedData.txt");
     if(!inFile.is_open()){
      exit(-1);
     }
     else
     {
      while(inFile.getline(ival,50)){
       vec.push_back(ival);
      }

     }
     for(iter=vec.begin();iter!=vec.end();){
      size_t n=(*iter).size()+1;
      char* p=new char[n];
      strcpy_s(p,n,(*iter).c_str());
      strcpy_s(sceBuf[i].sceneryName,n,p);
      ++iter;
       doub=atof((*iter).c_str());
      sceBuf[i].wLon=doub;
      ++iter;
      doub=atof((*iter).c_str());
      sceBuf[i].eLon=doub;
      ++iter;
      doub=atof((*iter).c_str());
      sceBuf[i].nLat=doub;
      ++iter;
      doub=atof((*iter).c_str());
      sceBuf[i].sLat=doub;
      ++iter;
      i++;
     }
    }

    这段程序是getStoredPosition类的,这个类主要实现的是将存储好的景点信息借助Vector读到一个Struct里,但是在将string类型数据转换为double时用的一个库函数atof(),但是当最后一位小数小于等于5时(我还没验证5)转换的数据准确,当最后一位小数大于5是就出问题,比如本来是121.2346转换之后就成为121。2346999999..。这是一个很大的问题,过后解决。

  • 相关阅读:
    docker 存储扩容和存放路径修改
    gitlab+jenkins+webhook 代码发布
    jenkins 流水线(pipline)
    kafka单机部署
    nload命令
    jumpserver部署维护
    mysql sleep连接过多的问题解决
    监控zabbix-server本身
    DevOps方案探究
    ceph 存储
  • 原文地址:https://www.cnblogs.com/buffer/p/1279018.html
Copyright © 2011-2022 走看看