我们最近在大学里听了一场讲座,教授告诉我们在不同编程语言中编程时需要注意的不同事项。以下是C++的一个例子:
std::string myFunction()
{
return "it's me!!";
}
int main(int argc, const char * argv[])
{
const char* tempString = myFunction().c_str();
char myNewString[100] = "Who is it?? - ";
strcat(myNewString, tempString);
printf("The string: %s", myNewString);
return 0;
}
这个代码可能失败的原因在于return "it's me!!"
会隐式调用带有char[]参数的std::string构造函数。此字符串从函数中返回,而函数c_str()返回了指向std::string数据的指针。由于函数返回的字符串没有被任何地方引用,因此应立即释放它。这就是理论。
然而,让这个代码运行却没有问题。 很想听听您的想法。 谢谢!
strcat(myNewString, yFunction().c_str());
。(提示:临时对象的生命周期延续到完整表达式结束,因此尽管这看起来有些相似,但是100%被定义。) - Damon