@关于C语言函数返回char *类型的一些问题TOC

关于C语言函数返回char *类型的一些问题

以下是我在写C语言中返回值类型为char *函数时遇到的一些问题,在参考了博客:https://blog.csdn.net/Xixo0628/article/details/119870914后修改代码可成功运行。

题目

输入一个字符串,然后输入两个字符,输出该字符串中从第一个字符匹配的位置到第二个字符匹配的位置的所有字符。通过返回字符指针的子函数实现。(从字符串的开头搜索第一个字符,同时从字符串的末尾查找第二个字符。)输入:programming r g,输出:rogramming。

原代码

#include <stdio.h>
#include <string.h>char* subString(char str[50], char a, char b){int i = 0, j = 0, count1 = 0, count2 = 0;char *newstr;while(str[i] != '\0'){if(str[i] == a){count1++;}if(str[i] == b){count2++;}if(count1>=1 && count2<=2){newstr[j] = str[i];j++;}i++;}newstr[j] = '\0';return newstr;
}int main(){char str[50];printf("Enter a string:");gets(str);char* res = NULL;printf("Enter two char:");char a,b;scanf("%c %c",&a,&b);res = subString(str,a,b);printf("%s",res);return 0;
}

运行结果


很奇怪,返回值不为0,无结果输出

修改后的代码

char* subString(char str[50], char a, char b){int i = 0, j = 0, count1 = 0, count2 = 0;//此处添加了mallocchar *newstr = (char *)malloc(sizeof(char));while(str[i] != '\0'){if(str[i] == a){count1++;}if(str[i] == b){count2++;}if(count1>=1 && count2<=2){newstr[j] = str[i];j++;}i++;}newstr[j] = '\0';return newstr;
}

运行结果


成功!

分析原因

当函数返回作为数组名的newstr之后,临时字符数组的空间就会被释放。之后又重新调用了新的函数printf,导致最终根据返回指针所输出的结果变成了刷新后的值,而这个值几乎可以认为是随机的。

关于C语言函数返回char *类型的一些问题相关推荐

  1. c语言函数返回值类型必须,C++中函数类型与定义的函数返回值类型必须相同么?...

    C++中函数类型与定义的函数返回值类型必须相同么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C++中函数类型与定义 ...

  2. C语言如何返回char类型,函数返回char类型数组,调用 函数后如何接收值?

    我现在刚在学C语言,今天想要实现一个功能: 用C语言读取一个文件的指定行,(如读取a.log文件的3--5行),现在实现了读取函数, 但在main函数调用时不知道怎么接收返回的值. 代码如下: #in ...

  3. C语言中自定义函数返回数组类型

    相信大家在C语言中写一些函数的返回值用到了void,int,char,double等等,但是好像没有遇到数组类型的,确实在C语言直接返回数组类型,是会报错的.具体的原因只要大家学习了指针还是可以理解的 ...

  4. 函数的返回值,C语言函数返回值详解

    看旋转编码器程序的时候,遇见了一些关于函数返回值的函数,感觉很懵逼,就百度了一下C语言函数调用,感觉写的挺好的, 原链接:http://c.biancheng.net/view/204.html 通常 ...

  5. C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)

    C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...

  6. 关于C语言函数返回数组的问题【转】

    (转自:https://blog.csdn.net/earbao/article/details/53401800) 关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实 ...

  7. c语言函数输出数组,如何让C语言函数返回一个二维数组

    为了让C语言函数返回一个二维数组,有些人这样定义函数: int **foo(int rows, int columns) 然后在函数中费劲心机拼出来一个这样的malloc语句: int (*resul ...

  8. c语言在函数中返回数组,关于C语言函数返回数组的问题

    关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意: 1.该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放. 可以是全局 ...

  9. c 语言 函数返回数组_如何在C ++函数中返回数组

    c 语言 函数返回数组 介绍 (Introduction) In this tutorial, we are going to understand how we can return an arra ...

最新文章

  1. 与旷视、商汤等上百家企业同台竞技?AI Top 30+案例评选等你来秀!
  2. linux下查看系统进程占用的句柄数
  3. SpringMVC获取请求参数-POJO类型参数
  4. springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
  5. python中print的用法_Python中print函数简单使用总结
  6. 前端技术及开发模式的演进,带你了解前端技术的前世今生
  7. centos7下安装python3 解决openssl等一系列问题
  8. 分享两个私藏的获取电子书资源方法
  9. linux 用户登陆全部记录,Linux—— 记录所有登陆用户的历史操作记录
  10. (四)Selenium通过谷歌插件实现使用隧道代理
  11. Google设置应用专用密码
  12. 【立创开源】ESP8266制作的1.44寸TFT显示屏太空人天气时钟(st7735)(增加农历显示)(抄作业)
  13. 美国计算机专业硕士好申请学校,美国计算机硕士申请难度大PK
  14. 远程桌面连接时无法访问远程计算机的计算机属性提示系统调用失败,远程过程调用失败【应对技巧】...
  15. 360°全方位解析C语言的三目运算符
  16. 抽象数据类型 C++实现 计算复数 [(8+6i)*(4+3i)]/[(8+6i)+(4+3i)]= ?
  17. ggplot 绘制热图
  18. 为什么高级程序员不必担心自己的技术过时?
  19. 创建型模式-工厂方法模式(二)
  20. 一文搞明白整型提升,截断等相关概念【C语言】

热门文章

  1. 语音讲解机器人更是一种营销工具
  2. 获取路由器超级用户权限(你懂得...)
  3. android oncreate调用,Android app启动activity并调用onCreate()方法时都默默地干了什么?...
  4. Android --- SQLite helper 的 onCreate 和 onUpgrade 不调用
  5. ps处理图片成灰色图
  6. 生命的形成《基督教与科学》第十八课
  7. 基于VUE框架的网页音乐播放器(可自适应手机布局)
  8. (C#脚本)Unity中角色移动的几种实现方法,以及心得。(适合新手入门)
  9. LED数字显示消费机设置说明
  10. Win10安装Oracle19c,详细过程(2022最新)