1

我正在尝试阅读用户的输入。当我编译程序时,我收到消息,“控制到达非无效函数的结尾 [-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 引擎盖下发生了什么,所以它只会导致一些像这样的问题:)。

4

2 回答 2

3

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

如果函数的返回类型不是 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 );
}
于 2019-11-12T17:05:11.477 回答
-2
char *read_line(char *buf, size_t sz) {
    while(fgets(buf, sz, stdin)) {
        fputs(buf, stdout);
    }
     return buf;
}

于 2019-11-12T17:07:51.870 回答