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. return结果感觉都是对的是因为后面并没有用到这个返回值。
    而参数ptr指针所指向的内存空间已经被正确改变了,所以输出ptr结果是正确的。

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