1. 程式人生 > >cocos2d-x 關於 std::string 與 const char* 之間轉換的奇怪問題

cocos2d-x 關於 std::string 與 const char* 之間轉換的奇怪問題

 //先儲存一個string型別資料
    CCUserDefault::sharedUserDefault()->setStringForKey("Jason", "Hello");
    CCUserDefault::sharedUserDefault()->flush();
    
    //然後通過下面方式得到字串
    const char* fileName = CCUserDefault::sharedUserDefault()->getStringForKey("Jason").c_str();
    //列印語句正常,輸出為 Hello
    CCLOG("fileName:%s", fileName);
    //可是下面語句在裝置上顯示就出錯,或是什麼都沒有,或是字串不全,或是顯示 Helvetica
    CCLabelTTF* label = CCLabelTTF::create(fileName, "Helvetica", 24);
    label->setPosition(ccp(240, 160));
    addChild(label);
//接著來解決上面問題,我們換種寫法 
    CCLabelTTF* label = CCLabelTTF::create(CCUserDefault::sharedUserDefault()->getStringForKey("Jason").c_str(), "Helvetica", 24);
    label->setPosition(ccp(240, 160));
    addChild(label);  //結果為Hello,正常

//我們再換種寫法 
    std::string fileName = CCUserDefault::sharedUserDefault()->getStringForKey("Jason");
    CCLabelTTF* label = CCLabelTTF::create(fileName.c_str(), "Helvetica", 24);
    label->setPosition(ccp(240, 160)); //結果也為Hello,正常
 //再來種寫法 
    std::string fileName = CCUserDefault::sharedUserDefault()->getStringForKey("Jason");
    const char* file = fileName.c_str();
    CCLabelTTF* label = CCLabelTTF::create(file, "Helvetica", 24);
    label->setPosition(ccp(240, 160));
    addChild(label);
    //結果這種寫法也正常,那為什麼最上面寫法就得不到正確結果呢??

總結:雖然深層原因不知道,但可以先記住: 返回std::string型別就用std::string型別來接

我的cocpos2d-x版本cocos2d-2.1rc0-x-2.1.2,有知道原因的童鞋請賜教。