需要澄清有关 C 中的 gets 函数

Need clarification regarding gets function in C

我是 C 编程新手。我正在尝试练习一个简单的练习题:如下:

编写一个程序,一行一行地读取输入行,直到到达文件末尾,确定每个输入行的长度,然后只打印找到的最长行。您可以假定最大输入行长度为 1000 个字符。

我的代码粘贴在这里:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1000

int main(void)
{
    char line[MAX_LEN], line_temp[MAX_LEN];
    int largest_line_size = 0;
    int current_line_size;

    while ( gets ( line_temp ) != NULL)
    {
        if ( ( current_line_size = strlen( line_temp ) ) > largest_line_size )
        {
            strcpy(line, line_temp);
            largest_line_size = current_line_size;
        }

        /*printf("%s\n", line); */
    }
    printf("%d", largest_line_size);
    printf("%s", line);

    return EXIT_SUCCESS;

}

问题是代码运行,接受输入,但我从来没有达到 while 循环中断的地步。使用 gets() 函数时如何遇到 NULL 指针?

非常感谢您的帮助。

谢谢,

问题说您必须从文件中读取输入
您为什么要在 运行 时间从用户那里接受它?

例如,如果fr是一个文件,您可以执行以下操作。

fr = fopen ("filename", "rt");  /* open the file for reading */
/* filename is the name of the file */
/* "rt" means open the file for reading text */

while(fgets(line_temp,MAX_LEN, fr) != NULL)
{ //...do your stuff }

注意,当文件中没有更多行时,fgets() returns NULL。

我自己解决了这个问题。当从 stdin 读取字符时,在上面的代码中终止循环的方法是在 Windows 中按 CTRL-D (Unix) 或 CTRL-Z。在任何一种情况下,都会触发 EOF 并且 gets 或 fgets 命令 returns 一个 NULL 指针。很抱歉浪费了时间。

谢谢