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,有知道原因的童鞋请赐教。


你可能感兴趣的:(cocos2d-x 关于 std::string 与 const char* 之间转换的奇怪问题)