C语言中返回字符串函数的四种实现方法

有四种方式:

1。使用堆空间,返回申请的堆地址,注意释放

2。函数参数传递指针,返回该指针

3。返回函数内定义的静态变量(共享)

4。返回全局变量

其实就是要返回一个有效的指针,尾部变量退出后就无效了。

使用分配的内存,地址是有效 
char   *fun() 

        char*   s   =   (char*)calloc(100,   sizeof(char*)   ); 
        if   (s) 
                strcpy   (   s   ,   "abc "   ); 
        return   s; 

但这种方式需要注意,必须由使用将将返回的地址free掉

将地址由入参传入 
char*   fun(char*s) 

        if   (s) 
              strcpy(s,   "abc "); 
        return   s; 

这种方式调用都要注意给s分配的大小是足够。 
可以这样: 
char*   fun(char*s,   int   len) 

        if   (s) 
        { 
              strncpy(s,   "abc ",   len-1); 
              s[len-1]   =   0; 
        } 
        return   s; 
}

或才使用局部静态变量 
char*   fun() 

        static   char   s[100]; 
        strcpy(s,   "abc "); 
        return   s; 

这种方式需要注意,不要修改返回的这个字符串,由于是共享地址,对它的修改会反应到每个调用者的。可以这样: 
const   char*   fun() 

        static   char   s[100]; 
        strcpy(s,   "abc "); 
        return   s; 
}

还有一种是使用全局变量 
char   g_s[100]; 
char*   fun() 

        strcpy(g_s,   "abc "); 
        return   s; 

同样的,也要注意这个变量可存储的最大空间。

时间: 2024-08-10 02:11:27

C语言中返回字符串函数的四种实现方法的相关文章

javascript中定义声明函数的四种方法

javascript中定义声明函数的四种方法 :http://blog.163.com/zzf_fly/blog/static/209589158201286104927248/ 方法一:function functionName([parameters]){functionBody}; 方法二:将一个未命名的函数function赋给一个指定变量(var):var add=function(a, b){} 方法三:使用new运算符声明函数varName=new Function([param1N

用R语言实现对不平衡数据的四种处理方法

https://www.weixin765.com/doc/gmlxlfqf.html 在对不平衡的分类数据集进行建模时,机器学**算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带有误导性那么,这种结果是为何发生的呢?到底是什么因素影响了这些算法的表现? 在不平衡的数据中,任一算法都没法从样本量少的类中获取足够的信息来进行精确预测因此,机器学**算法常常被要求应用在平衡数据集上那我们该如何处理不平衡数据集?本文会介绍一些相关方法,它们并不复杂只是技巧性比较强 本文会介绍处理非

JavaScript中函数的四种调用模式

理解函数的四种调用方法,可以有效的帮助我们分析和理解JavaScript代码.但是经常有人分不清楚或者不理解这四种调用模式,在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:1.函数调用形式 2.方法调用形式 3.构造器调用形式 4.上下文调用形式(apply,call)这里所有的调用模式中,最主要的区别在于关键字 this 的意义.下面分别介绍这几种调用形式. 一.函数调用形式

函数的四种调用模式.上下文调用.call.apply

闭包:函数就是一个闭包,一个封闭的作用域; 返回函数,要返回多个函数就用一个对象封装一下, 立即执行函数+return 回调函数 JS动态创建的DOM,不会被搜索引擎抓取,对SEO不友好. /*window的name属性*/ function fn(){ console.log(this.name); } fn.call({name:"zhangsan"});//"zhangsan" console.log(); fn();//'' 打印空字符串,此时调用fn其中的

C语言中的字符串

1.从概念上讲,C语言中没有字符串数据类型 2.在C语言中使用字符数组来模拟字符串 3.C语言中的字符串是以'\0'结束的字符数组 4.C语言中的字符串可以分配于栈空间,堆空间或者只读存储区 5.字符串的长度就是字符串所包含字符的个数 6.C语言中的字符串长度指的是第一个'\0'字符前出现的字符个数 7.C语言中通过'\0'结束符来确定字符串的长度 注意: strlen返回数为无符号数,两个无符号数相减依然为无符号数. 1.一般情况下,千万不要自行编写C标注库已经提供的函数 2.标准库有时会使用

C语言中的自定义函数

C语言中可以使用系统函数也可以使用自己的函数,就是自定义函数 自定义函数分为四种 第一种:无参无返回值的 函数的声明 void sayH(); 函数的实现 void sayH(){ printf("你好"); } 第二种:有参数无返回值 函数的声明: void pxsbx(int c,int k); 函数的实现: void pxsbxx(int c,int k){ int i,j; for (i=0; i<c; i++) { for (j=0; j<=i; j++) { p

第30课 C语言中的字符串

1. 字符串的概念 (1)字符串是有序字符的集合 (2)字符串是程序中的基本元素之一 (3)C语言中没有字符串的概念,而是通过特殊的字符数组模拟字符串,是以'\0'结尾的字符数组. 2. 字符数组与字符串 (1)在C语言中,字双引号引用的单个或多个字符是一种特殊的字面量,被存储于程序的全局只读存储区,在本质上为字符数组,编译器自动在结尾加上'\0'字符. [实例分析]字符数组与字符串 #include <stdio.h> int main(){ char ca[] = {'H','e','l'

C语言中关于scanf函数的用法

scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为: scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成

【转】Java中字符串中子串的查找共有四种方法(indexof())

原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引. 2.int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引. 3.int lastIndexOf(String st