在C/C++中关于局部数组问题(子函数等)

在C/C++编程中,子函数内的局部数组不能直接返回,因为它们会在函数调用结束后被释放。为了解决这个问题,可以采取三种策略:1) 通过传入数组指针作为参数,由调用者负责分配和释放;2) 使用静态数组,内存分配在数据段;3) 动态分配内存,使用`malloc()`函数在堆上创建数组,调用者需要记得释放内存。
摘要由CSDN通过智能技术生成

在子函数中,定义的数组变量是不允许返回的,因为它只是临时变量,暂存与当前堆栈里面,只要函数调用结束,数组马上被释放。

 

但当有时我们需要返回有关数据的指针或数组时,有几种方法可以解决:

(1)我们直接把给函数传进数组指针的参数,也就是说你在调用之前先创建数组,作为参数传递进函数,然后返回

例 读取文件的一行数据

char * getFileOneLine(char *fileName,char *content){

        FILE *fp;

        fp=fopen();//打开文件

        if(fp==NULL){//文件指针指空

              AfxMessageBox("无法打开文件");//VC

             printf("Cannot open this file,Please check it\n");

                  return (char *)(NULL);
}

if(!fgets(buffer,250,fp)){//读取文件一行,其遇'\r\n'(windows中) '\n'(linux/unix中)  或读到末尾截止  ,这里暂读250字节存于buffer中,也就

//是说在调用该函数的buffer必须大于250否则有可能缓冲区溢出
   return (char *)(NULL);
  }

      fclose(fp);

return buffer;

}

(2)在子函数中定义静态边数组,这也是很方便的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值