C++ 中有一些很恶心的细节:
const char* getTempStr()
{
std::string s = "1234567";
return s.c_str();
}
这个函数中s 作为一个临时变量当结束了函数的话,会释放这个栈所以。。。。在main函数中sql指针指向一个乱的地址;
int main(int argc, const char * argv[])
{
const char* sql = getTempStr();
std::cout <<sql;
}
类似的我在项目中遇到的:
std::string getTempStr()
{
std::string tempStr = "";
char sql[234] = {0};
sprintf(sql,"UPDATE "MAPDATA_INFO_TABLE" set "MAPDATA_SCORE"=%d,"MAPDATA_STAR"=%d where "MAPDATA_POS"=%d",1,1,1");
tempStr = sql;
return tempStr;
}
int main(int argc, const char * argv[])
{
方法1:
std::string temp = getTempStr();
const char* sql = temp.c_str();
GSQLITE3->exec(sql,NULL);
方法2:
GSQLITE3->exec(getTempStr().c_str(),NULL); //这条语句会出错。(在android机器上)
}