将char数组传递给C ++中的函数时的差异行为

时间:2014-07-07 03:05:51

标签: c++ arrays pointers

我以两种方式声明并初始化了两个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:我的示例函数看起来很有趣,但我只保留了我认为相关的内容:)

1 个答案:

答案 0 :(得分:2)

执行“return const_cast(return_array.c_str());”时您正在返回一个指向可能消失的内存的指针,因此您不能保证在返回后指向有效数据。理解字符串类将数据复制到自身(或它管理的内存)并且返回指向该内存的指针可能会有所帮助,但是当字符串超出范围时,它会返回该内存。可能会发生内存仍然包含“012345”值,直到被其他内容覆盖,因此它似乎可以工作,但这不是一个好主意。另一方面,如果你泄漏了字符串对象,那么在它上面做了一个新的并且没有删除它,我怀疑这会“工作”(但是然后泄漏字符串对象,这通常是一个坏主意)。

“const_cast”不保证指向的数据仍然有效。