Const char*变成空的问题

头文件里定义:
const char* seatid;

初始化:

std::string s = CCUserDefault::sharedUserDefault()->getStringForKey("seatid");
   
    seatid = s.c_str();
printf("before update,seateid:%s",seatid);
this->schedule(schedule_selector(GameScene::Update),1);

```


此时打印,seatid:9
然后在自定义的Update方法里:
void GameScene::Update(float dt){
    printf("update,seateid:%s",seatid);
}


```

此时再打印,seatid 是“”。
请问这是怎么回事?

ps:设置了断点,发现 printf("update,seateid:%s",seatid);之后,seatid的地址变了,好像先是NULL之后,又分配了新地址

如果只是这些代码,地址不会变的。update打印出空是因为局部变量被销毁了。

LZ可以直接这么做:

成员变量

std::string s;
```


s = "100";
log(s.c_str());//before
this->scheduleOnce(schedule_selector(HelloWorld::Update),1);
```


void HelloWorld::Update(float dt){
    log(s.c_str());//update
}
```

楼主,你还是用char数组吧,把临时变量的字符串拷贝进数组里,就不会丢了

但是我定义的const char* seatid;是成员变量,初始化之后,应该不会丢吧

楼主这只是一个指针。。。。这个指针不会丢,但是无法保证指针指向的内容不丢。

— Begin quote from ____

引用第3楼ly_sr于2014-03-23 20:37发表的 回 2楼(孤独の快乐) 的帖子 :
但是我定义的const char* seatid;是成员变量,初始化之后,应该不会丢吧 http://www.cocoachina.com/bbs/job.php?action=topost&tid=195187&pid=909455

— End quote

你指针指向的是一个局部变量的地址

明白了。我改成是在cpp文件里定义std::string s,就可以了。但是还有个问题想请教一下,我还有个ccarray的数组,是在头文件里定义的,然后初始化:
others = CCArray::createWithCapacity(14);

CC_SAFE_RETAIN(others);

for(int i=0;i<14;i++){
    Player* p = Player::create();
    others->addObject(p);
}

Player是自己定义的类,但是在update里,也出现了从others中取出的对象是null的问题,是不是也是这样原因?

— Begin quote from ____

引用第6楼ly_sr于2014-03-24 15:27发表的 回 5楼(孤独の快乐) 的帖子 :
明白了。我改成是在cpp文件里定义std::string s,就可以了。但是还有个问题想请教一下,我还有个ccarray的数组,是在头文件里定义的,然后初始化:
others = CCArray::createWithCapacity(14);

CC_SAFE_RETAIN(others);

http://www.cocoachina.com/bbs/job.php?action=topost&tid=195187&pid=909987

— End quote

我只能说这段代码我看不出有啥问题