C ++返回一个char指针并打印

时间:2013-10-27 06:38:56

标签: c++ pointers char cout

这是对的吗?我有一个指针,我正在进入一个void函数,然后我想覆盖

void Foo(char *myReturn)
{
   char myOutput[] = "Foobar";
   myReturn = myOutput;
}
int main()
{
   char *myTestVar;
   Foo(myTestVar);
   cout << myTestVar;
}

这只是崩溃而没有错误日志。

现在我已经尝试了myReturn = &myOutput以及*myReturn = &myOutput(除非我误解了某些内容,这就是我认为它的工作原理)但我总是得到

:|error: invalid conversion from 'char (*)[(((unsigned int)(((int)length) + -0x000000001)) + 1)]' to 'char'|

4 个答案:

答案 0 :(得分:4)

myOutputFoo的本地,并且没有在堆上分配任何内存。因此,当您尝试通过myTestVar访问它时,它不会指向有效的内存位置,并且尝试通过它访问数据会使您编程崩溃。

答案 1 :(得分:3)

myOutput []是函数foo()中的局部变量。您将myOutput的地址分配给myReturn:

myReturn = myOutput;    // myReturn & myOutput have same address

然后完成该功能并删除myOutput。传递给函数foo()的myTestVar现在指向无效的内存位置。这就是你得到错误的原因。 试试这个:

myReturn = new char[strlen(myOutput)+1];
strcpy(myReturn,myOutput);

myReturn和myOutput具有相同的值,但myReturn指向的内存地址与myOutput不同。

答案 2 :(得分:2)

这是错误的,因为char myOutput[]是使用automatic storage分配的,这意味着当它超出范围时会被删除。因此,如果您在函数之外使用它,那么您正在调用undefined behavior

答案 3 :(得分:1)

您的程序有未定义的行为myOutput[]是一个具有自动存储功能的本地数组,它不存在于函数范围之外。