我以两种方式声明并初始化了两个char数组:
char array_1 [10] = "012345";
char* array_2 = Array_Initializer();
array_initializer如下:(我删除了一些我确定无关紧要的部分)
char* Array_Initializer(){
string return_array = "012345";
return const_cast<char*> (return_array.c_str());
}
当我cout<< array_1<< endl;
和cout<< array_2<< endl;
时,两者都会输出&#34; 012345&#34;正确。
但问题来自于我将它们传递给一个以char* arg
为参数的函数。该函数只能正确获取array_1,但在传入array_2时会得到一个未定义的值。谁能告诉我为什么?
PS:我的示例函数看起来很有趣,但我只保留了我认为相关的内容:)
答案 0 :(得分:2)
执行“return const_cast(return_array.c_str());”时您正在返回一个指向可能消失的内存的指针,因此您不能保证在返回后指向有效数据。理解字符串类将数据复制到自身(或它管理的内存)并且返回指向该内存的指针可能会有所帮助,但是当字符串超出范围时,它会返回该内存。可能会发生内存仍然包含“012345”值,直到被其他内容覆盖,因此它似乎可以工作,但这不是一个好主意。另一方面,如果你泄漏了字符串对象,那么在它上面做了一个新的并且没有删除它,我怀疑这会“工作”(但是然后泄漏字符串对象,这通常是一个坏主意)。
“const_cast”不保证指向的数据仍然有效。