C++返回字符指针并打印
C++ returning a char pointer and printing
这是正确的吗?我有一个指针,我正在传递给一个 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);
myReturn
和 myOutput
具有相同的值,但myReturn
指向的内存地址与 myOutput
不同
myOutput
是Foo
的本地,在堆上没有分配任何内存。因此,当您尝试通过 myTestVar
访问它时,它不指向有效的内存位置,并且尝试通过它访问数据会使程序崩溃。
这是
错误的,因为char myOutput[]
是使用自动存储分配的,这意味着当它超出范围时,它将被删除。因此,如果你确实在函数之外使用它,那么你正在调用未定义的行为。
程序具有未定义的行为。 myOutput[]
是一个具有自动存储功能的本地数组,它不会超出函数的范围。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 加载有空指针的字符数组的打印值
- 指向整数数组和打印总和的指针
- 为什么在C++中增加指针后打印了一个值而不是 NULL/0?
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 为什么我的函数无法使用指针打印多维数组的元素?
- 如何取消引用和打印指针数组的每个元素?
- 将指针传递给函数 - 为什么我无法打印地址?
- 打印带有指针的参数和环境
- 如何打印指针的地址?
- 可视C++打印指针无法确认显示基础
- 打印指针会导致分段错误
- 打印指针到chuchar的值
- 打印指针指向的内存位置和值
- 如何用循环在C 中打印指针
- 如何从方法中打印指针的值
- 正在获取ostream模板以打印指针列表中的实例属性
- 如何打印指针字符数组
- C++打印指针的值会产生奇怪的结果