C++返回字符指针并打印

C++ returning a char pointer and printing

本文关键字:打印 指针 字符 返回 C++      更新时间:2023-10-16

这是正确的吗?我有一个指针,我正在传递给一个 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'|

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

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

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

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

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

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

这是

错误的,因为char myOutput[]是使用自动存储分配的,这意味着当它超出范围时,它将被删除。因此,如果你确实在函数之外使用它,那么你正在调用未定义的行为。

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