char* stringReturn()
{
char a[] = "Array of characters";
//return a; // I know stack allocation should not be returned
char *b = "Pointer to a string";
return b; // Is it safe ?
}
int main() {
char *str = stringReturn();
cout<< str;
return 0; }
这是安全的意思,那么数据“指向字符串的指针”将存储在内存中。将指向字符串的指针返回给调用者是否安全?
可能的重复[http://stackoverflow.com/questions/2327841/c-string-literal-data-type-storage](http://stackoverflow.com/questions/2327841/c-string-literal-数据类型存储) – jrok 2012-04-02 17:39:06
另请参阅:http://stackoverflow.com/questions/349025/is-a-string-literal-in-c-created-in-static-memory – 2012-04-02 17:39:28
请注意,实际上,您正在编写C代码,不用介意'std :: cout'。这有缺点。其中之一是字符串处理相当复杂和危险。 (对于初学者'b'应该是一个'const char *';尝试修改它的调用者将炸毁地球,返回'a'也是一个灾难,并且返回一个动态分配的字符数组成为维护噩梦。你有没有考虑过使用'std :: string'?这样做,这些问题就会消失。 – sbi 2012-04-02 17:46:01