'Control reaches end of non-void function' 在 C 中

'Control reaches end of non-void function' in C

我正在尝试读取用户的输入。当我编译程序时,我收到消息,“控制到达非空函数的末尾[-Wreturn-type] }'.

char *read_line(char *buf, size_t sz) {
    while(fgets(buf, sz, stdin)) {
        fputs(buf, stdout);
    }
}

int main(int argc, char** argv) {
    char *buf;

    read_line(buf, 1024);
}

我希望程序接受用户的输入,按回车键,然后将他们的输入打印出来。我必须使用我使用过的方法来完成它(这是一些作业的一部分)。

我不完全了解 C 的幕后发生了什么,所以它只是导致了很多这样的问题:)。

对于初学者来说,该函数具有未定义的行为,因为它使用了一个未初始化的指针。

如果函数的 return 类型不为 void,则该函数应有一个 return 语句。

看来你的意思如下

#include <stdio.h>

void read_line( char *buf, size_t sz ) 
{
    while( fgets(buf, sz, stdin) && buf[0] != '\n' ) 
    {
        fputs(buf, stdout);
    }
}

int main( void ) 
{
    enum { N = 1024 };
    char buf[N];

    read_line( buf, N );
}

或者类似下面的东西

#include <stdio.h>

char * read_line( char *buf, size_t sz ) 
{
    if  ( fgets(buf, sz, stdin) && buf[0] != '\n' ) 
    {
        return buf;
    }
    else
    {
        return NULL;
    }
}

int main( void ) 
{
    enum { N = 1024 };
    char buf[N];

    char *p = read_line( buf, N );\

    if ( p != NULL ) fputs( p, stdout );
}
char *read_line(char *buf, size_t sz) {
    while(fgets(buf, sz, stdin)) {
        fputs(buf, stdout);
    }
     return buf;
}