atoi in c ++ results segmentaion error

who*_*iac 0 c++

以下是代码中的一段,它假设测试与服务器的通信并从中获取图片:

bool testPICcomm(){
    Poco::Logger &logger = Poco::Logger::get("PictureTester");
    logger.setLevel(Poco::Message::PRIO_DEBUG);
    HttpClient* h = new HttpClient(host, 80);
    std::map<std::string, std::string> headers;
    Poco::UTF8Encoding utf;
    Encoder encoder(utf);


     h->connect();
     h->sendHttpRequest(askForPic,"","",0,0);
     if((h->getHttpHeaders(headers, encoder)) == false)
         {
         logger.debug("Couldn't Retrieve Headers "+ false);
         h->close();
         return false;
         }
     logger.debug("got headers");

     //get head data
     std::string mime = headers["Content-Type"];
     logger.debug("mime type:"  + mime);
     logger.debug("length string: "  + std::string((headers["Content-Length"]).c_str()));
     int length= atoi((headers["Content-Length"]).c_str());
     logger.debug("pic length:" + length);
...
Run Code Online (Sandbox Code Playgroud)

我在linux上使用eclipse(eclipse功能不太好,所以我只在控制台上工作).

现在通过跟踪记录器消息,我推断出atoi(查看代码的结尾)会导致分段错误.

考虑到另一个函数testXMLcomm工作正常并且它看起来很相似,这真的很奇怪.

我包括stdio和stdlib ofcourse.

请帮忙!!!

Ste*_*sop 6

我预计崩溃就行了logger.debug("pic length:" + length);.你已经length为一个指向字符串的文字添加了一个整数偏移量,并在无人区域中提出了一个地址.

你可能想写一些类似的东西:

ostringstream ss("pic length: ");
ss << length;
logger.debug(ss.str());
Run Code Online (Sandbox Code Playgroud)

或者logger.debug("pic length: " + boost::lexical_cast<string>(length));,或者C++ 11 std::to_string(length).