牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2012-08-03 投稿人: 浏览次数:1232

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

 

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

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

例 读取文件的一行数据

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

        FILE *fp;

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

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

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

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

                  return (char *)(NULL);
}

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

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

      fclose(fp);

return buffer;

}

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

 

#define MAX 1024

char * getInfo(){

     static char info[MAX];

    ……

Your code

……

return info;

}

 

(3)第三种是动态的,在子函数中定义数组指针,然后对指针进行分配空间,此时就可避免数组存放于堆栈,而是指向固定分配的空间,所以在调用该函数的函数还可以用此段数据,例

#define MAX 1024

char *getInfo(){

char *info;

info=(char *)malloc(MAX*sizeof(char));

……

Your code

……

return info;

}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。