yuchu3d 2021-12-02 22:37 采纳率: 82.8%
浏览 59
已结题

C语言 关于一个程序的 return 问题

在学习C语言,遇到一个问题,如下: 由于用fgets()函数读取字符串时,会读取换行符,编一个函数,将换行符换成‘\0’, 并且去掉多余的字符,即s_gets() 函数。

我自己变得程序如下:

#include<stdio.h>    // s_gets

#define L 5

char *s_gets(char *ptr, int n);

int main(void)

{
    char ch[L];
    
    puts("enter a word:");
    
    s_gets(ch,L);
    
    fputs(ch,stdout);
    
    puts("****");
    
    return 0;    
    
}

char *s_gets(char *ptr, int n)

{
    char *p1;
    
    int i=0,j;
    
    p1=fgets(ptr,n,stdin);
    
    if(p1)
    {
        
    while(*p1!='\n'&& *p1!='\0')
    
    p1++;
    
    if(*p1=='\n')
    
    *p1='\0';
    
    else
    
    while(getchar()!='\n')
    
    continue ;
        
    }
    
    return p1;    
    
}

这个 程序  可以不用这么写,可以用*ptr 替换 *p1,  现在    我就想就我这个程序,问一下   关于return 的问题:

在 char *s_gets(char *ptr, int n)  中,运行到最后,指针P1 指向的是 ptr字符串的末尾 '\0'.  

如果   return 返回的话     应该返回   return p1-n  ;  才对。

但是   程序奇怪的是    return p1  ;      return p1-5 ;    甚至  不写  return  这一项,结果都是对的。


我想问的是,难道这个调用函数   不需要return 吗? 

到底  什么时候  需要return  ,   什么时候不需要? 

谢谢!

  • 写回答

1条回答 默认 最新

  • togolife 2021-12-02 22:41
    关注
    1. return结果感觉都是对的是因为后面并没有用到这个返回值。
      而参数ptr指针所指向的内存空间已经被正确改变了,所以输出ptr结果是正确的。

    2. 是否需要return看你的设计,想返回什么结果,以及期望调用者对结果做什么处理?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月2日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。