函数返回指针的几种方案

    技术2022-06-23  48

    //展示函数如何返回指针 //当指针为全局变量、静态变量或指向堆中的数据时,可以从函数中返回。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<memory.h> //方案一(错误): //返回一个指向局部变量的指针,当函数结束时,由于变量已被自动销毁, //这个指针所指向的地址的内容"未定义" char *fun_1() { char buffer[] = "Only works for simple strings"; return buffer; } //方案二(可选): //直接返回一个字符串常量指针,只适合简单的字符串 char *fun_2() { return "Only works for simple strings"; } //方案三(可选): //使用全局声明的变量;缺点是全局数组任何人都可以修改,大型缓冲区如果闲置不用非常浪费内存空间 char global_array[] = "Only works for simple strings"; char *fun_3() { return global_array; } //方案四(可选): //使用静态变量;缺点是大型缓冲区如果闲置不用非常浪费内存空间 char *fun_4() { static char buffer[] = "Only works for simple strings"; return buffer; } //方案五(正确但不推荐): //显示分配一些内存,返回堆中的数据 //缺点:非常容易忘记释放已分配的内存,从而导致"内存泄漏" char *fun_5() { char *buffer = (char*)malloc(50); buffer = "Only works for simple strings"; return buffer; } //方案六(推荐): //要求调用者分配内存来保存函数的返回值,要求调用者释放所分配的内存; void fun_6(char *result , int sz) { char buffer[] = "Only works for simple strings"; strncpy(result,buffer,sz); } int main() { printf("%s/n",fun_1()); //打印"未定义字符串" printf("%s/n",fun_2()); printf("%s/n",fun_3()); printf("%s/n",fun_4()); printf("%s/n",fun_5()); char *buffer = (char*)malloc(50); fun_6(buffer,50); printf("%s/n",buffer); free(buffer); return 0; } 


    最新回复(0)