题:用指针作为形参,怎么在函数内开辟空间并返回给实参

本文探讨了在C/C++编程中遇到的问题,即如何在函数内部使用指针开辟内存空间,并正确地将其返回给调用函数的实参。文章通过两种方法解释了这个问题:一是使用二级指针,二是通过指针引用。通过实例代码展示了这两种方法的实现,说明了如何避免因空指针而导致的程序崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到了一个C/C++语言问题:

如下:

——————————————————————————————————————————-——

#include <stdio.h>

#include <iostream>

using namespace std;

void fun(char *p)
{
    p = (char *)malloc(100);//由于p是局部变量,所以fun函数结束,p便被销毁
}
int main(int argc, char *argv)
{
    char *str = NULL;
    
    fun(str);//str一直都是NULL;

    strcpy(str, "Hello world");

    cout << str <<endl;

    return 0;

}

————————————————————————————————————————————

结果编译出来没有问题,但是在执行的时候程序奔溃了,这是由于strcpy(str, "Hello world");将"Hello world"复制给str指针,但是str指针为空指针导致。为什么str会是空指针呢?还有这么开辟空间之后并返回给main()中的str指针呢?

这是由于fun()函数中的p指针只是str的一个副本,作为形参,虽然给p开辟了内存空间并指向这块空间,但是fun()函数结束p就被销毁了。

怎么样才能给str开辟空间呢?

代码如下:

—————————————————————————————————————————————

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值