C语言实现返回字符串函数的四种方法
前言
C语言返回字符串函数共有四种方式,分别如下:
- 使用堆空间,返回申请的堆地址,注意释放
- 函数参数传递指针,返回该指针
- 返回函数内定义的静态变量(共享)
- 返回全局变量
下面来看看详细的介绍
其实就是要返回一个有效的指针,尾部变量退出后就无效了。
使用分配的内存,地址是有效
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; }
同样的,也要注意这个变量可存储的最大空间。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用C语言能有所帮助,如果有疑问大家可以留言交流。
相关推荐
-
C语言中数组作为函数的参数以及返回值的使用简单入门
函数通过数组作为参数 如果想通过一个一维数组作为函数的参数,就必须声明函数形式参数,使用以下三种方式与所有三个声明方法之一产生类似的结果,因为每一种方式告诉编译器,一个整数指针将会要被接收.类似的方式,可以使用多维数组形式参数. 方式-1 形式参数为指针如下.在下一章将学习什么是指针. void myFunction(int *param) { . . . } 方式-2 如下形式数组参数的大小: void myFunction(int param[10]) { . . . } 方式-3 如下形式
-
C语言获取Shell返回结果的实现方法
Linux编程时候,如果我们需要调用shell命令或脚本通常使用system方法.如system("ls") 该方法返回值为0或-1,即成功或失败.而有的时候我们想要获取shell命令执行的结果,该怎么办呢? 我们可以将shell命令结果重定向到文件中,然后再读取这个文件,如: system("ls>result.txt") FILE *fp = fopen(result, "r") 当然我们也可以直接使用管道,如下面示例: #includ
-
C语言中函数返回字符串的方法汇总
在讨论着四种方法之前,首先要对函数有一个简单的认识,无论是在形实结合时,还是在return语句返回时,都有一个拷贝的过程.你传进来的参数是个值,自然函数在工作之前要把这个值拷贝一份供自己使用,你传进来的是个地址,函数也就会拷贝该地址供自己使用.同样return返回时,如果返回一个值,函数会将该值拷贝一份以提供给主调函数使用,返回的是一个指针(也就是地址),自然拷贝的就是一个地址,供主调函数使用. 先给出一个错误的例子: #include <stdio.h> #include <strin
-
C语言main函数的参数及其返回值详细解析
返回值的作用 main函数的返回值用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出.下面我们在winxp环境下做一个小实验.首先编译下面的程序:int main( void ){ return 0;}然后打开附件里的"命令提示符",在命令行里运行刚才编译好的可执行文件,然后输入"echo%ERRORLEVEL%",回车,就可以看到程序的返回值为0.假设刚才编译好的文件是a.exe,如果输入&
-
C语言 用指针作为函数返回值详解
C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include <stdio.h> #include <string.h> char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen(str2)){ return str1; }else{ return str2; } } int main(){ cha
-
C语言中返回错误信息的相关函数用法总结
C语言strerror()函数:返回错误原因的描述字符串 头文件: #include <string.h> 定义函数: char * strerror(int errnum); 函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回. 返回值:返回描述错误原因的字符串指针. 范例: /* 显示错误代码0 至9 的错误原因描述 */ #include <string.h> main() { int i; for(i =
-
C语言实现返回字符串函数的四种方法
前言 C语言返回字符串函数共有四种方式,分别如下: 使用堆空间,返回申请的堆地址,注意释放 函数参数传递指针,返回该指针 返回函数内定义的静态变量(共享) 返回全局变量 下面来看看详细的介绍 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 使用分配的内存,地址是有效 char *fun() { char* s = (char*)calloc(100, sizeof(char*) ); if (s) strcpy ( s , "abc " ); return s; } 但这种方式
-
C语言实现短字符串压缩的三种方法详解
目录 前言 一.通用算法的短字符压缩 二.短字符串压缩 (1)Smaz (2)Shoco (3)Unisox2 三.总结 前言 上一篇探索了LZ4的压缩和解压性能,以及对LZ4和ZSTD的压缩.解压性能进行了横向对比.文末的最后也给了一个彩蛋:任意长度的字符串都可以被ZSTD.LZ4之类的压缩算压缩得很好吗? 本篇我们就来一探究竟. 一.通用算法的短字符压缩 开门见山,我们使用一段比较短的文本:Narrator: It is raining today. So, Peppa and George
-
python字符串反转的四种方法详解
这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用reduce函数方法 book = 'Python程序设计' result = reduce(lambda x,y:y+x,book) print(result) 2.字符串切割 book = 'Python程序设计' print(book[::-1]) 3.用reversed方法,把字符串变成列表反转后拼接 result = reverse
-
C语言模块回调Lua函数的两种方法
lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平衡稍微会多写一点代码. 今天分享学到的C模块回调Lua函数的两种方法,都是炒冷饭,大侠勿喷. 1. C保存函数对象 C模块可以通过注册表保存Lua里面的对象,等适当时候取出再调用即可. 复制代码 代码如下: static int lua_callback = LUA_REFNIL; static int setnotify(lua_State *L) { lua_callback = luaL_ref(L, LUA_REGISTR
-
Python字符串拼接的4种方法实例
目录 1. 算术运算符拼接 (1)+算术运算符 (2) * 算术运算符 2.format方法 3.百分号操作符 4.特殊符号f 附:常见字符串去除空格的方法总结 总结 在程序实际应用中,少不了要进行字符串拼接的操作.下面介绍一下Python语言中四种字符串拼接的方式. 1. 算术运算符拼接 在Python中算术运算符一共有七种种,分别是+.-.*././/.**和%.其中+和*不仅可以用来进行算数计算,也可以用来字符串拼接. (1)+算术运算符 +运算符在Python中可以用作数学计算,例如:
-
Javascript 函数的四种调用模式
Javascript 函数的四种调用模式 1 函数模式 最普通的函数调用 // 声明式函数 function fn1 () { console.log(this); } // 函数表达式函数 var fn2 = function() { console.log(this); }; // 调用 函数中this表示全局对象,在浏览器中就是指window fn1(); //window fn2(); //window 2 方法模式 函数依附于一个对象,是对象的一个属性,我们再调用这个函数.这种模式就
-
浅谈JavaScript函数的四种存在形态
函数的四种存在形态: 1.函数形态 2.方法形态 将函数赋值给某一个对象的成员,那么就称为方法 3.构造器形态 4.上下文形态 1.函数形态: var foo = function() { alert(this); //this是window }; 2.方法形态: o = {}; o.foo = foo; //将函数foo赋值给对象o的foo属性 o.foo(); //弹出的是object,此时的this表示object var lib = { test:function() { alert(t
-
Python中修改字符串的四种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用join组成新字符串 >>> s='abcdef' #原字符串 >>> s1=list(s) #将字符串转换为列表 >>> s1 ['a', 'b', 'c', 'd', 'e', 'f'] #列表的每一个元素为一个字符 >>> s1[4]='
-
Python删除字符串中字符的四种方法示例代码
目录 一.删除字符串两端的一种或多种字符 二.删除字符串中单个固定位置的字符 三.删除字符串中任意位置的一种或多种字符 四.同时删除字符串内的多种不同字符 一.删除字符串两端的一种或多种字符 #strip().lstrip().rstrip()方法:(默认删除空格符) A.list.strip(字符):删除字符串两端的一种或多种字符: 例:删除字符串s两端 a 或 b 或 c 字符: s = 'abbmmmcccbbb' s1 = s.strip('abc') print(s1) #输出:mmm
-
php返回字符串中所有单词的方法
本文实例讲述了php返回字符串中所有单词的方法.分享给大家供大家参考.具体分析如下: 这段代码返回字符串中的所有单词,当$distinct=true时去除重复元素.代码如下: <?php function split_en_str($str,$distinct=true) { preg_match_all('/([a-zA-Z]+)/',$str,$match); if ($distinct == true) { $match[1] = array_unique($match[1]); } so
随机推荐
- PHP冒泡算法详解(递归实现)
- golang模拟实现带超时的信号量示例代码
- redis缓存的简单操作(get、put)
- 一个即时表单验证的javascript代码
- Java并发编程示例(一):线程的创建和执行
- asp.net与Discuz!NT整合集成实例教程
- 用jscript实现新建和保存一个word文档
- smarty 原来也不过如此~~呵呵
- 【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
- 用jquery模仿的a的title属性(兼容ie6/7)
- JavaScript实现复制文章自动添加版权
- IBM DB2 日常维护汇总(七)
- Js 时间间隔计算的函数(间隔天数)
- Win2003 服务器安装及设置教程 系统设置篇
- Java基础教程之构造器与方法重载
- Mybatis增删改查mapper文件写法详解
- 如何用itertools解决无序排列组合的问题
- Android 中使用EditText 点击全选再次点击取消全选功能
- OKHttp3(支持Retrofit)的网络数据缓存Interceptor拦截器的实现
- 利用Console来Debug的10个高级技巧汇总