//先存储一个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,有知道原因的童鞋请赐教。