cocos2d-x 關於 std::string 與 const char* 之間轉換的奇怪問題
阿新 • • 發佈:2019-01-27
//先儲存一個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,有知道原因的童鞋請賜教。