C程序逐行读取文本文件然后将这些行打印到终端

时间:2017-01-25 23:45:16

标签: c file

我希望c程序逐行读取文本文件,然后将这些行打印到终端。

我的代码

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char* line; 

    FILE *ifp;
    ifp = fopen("BBE.txt", "r");
    if (ifp == NULL)
    {
        printf("Error opening file!\n");
        exit(1);
    }

    while (fscanf(ifp, "%s", line) == 1)
    {
        printf("%s\n", line);
    }

    fclose(ifp);

    return 0;
}

当我尝试运行程序时,该程序不会向终端打印任何内容。这告诉我while循环不起作用,但我不确定为什么。

2 个答案:

答案 0 :(得分:1)

您的循环无效,因为fscanf成功后不会仅返回1

根据fscanf的手册页,返回值具有以下含义:

  

返回值

     

成功时,这些函数返回输入项的数量   成功匹配并分配;如果早期匹配失败,这可能比提供的数量少,甚至为零。

     

如果在第一次成功转换或匹配失败发生之前达到输入结束,则返回值EOF。如果发生读取错误,也会返回EOF,在这种情况下,将设置流的错误指示符(请参阅ferror(3)),并设置errno以指示错误。

此外,如另一个答案中所述:您写入 NOT YOUR 记忆的记忆:

char* line;

只是一个指向char的指针的声明。你需要的是一个连续写入的char数组。

你可以通过声明它来在堆栈上分配它:

char line[1000]; // Allocate a char array of the size of 1000.

或在堆上;

char* line = malloc(1000*sizeof(char)); // Allocate 1000 chars on the heap

此后你必须释放内存

free(line);

答案 1 :(得分:0)

您使用*line而未初始化它 - &gt;未定义的行为。

要解决此问题,您可以使用char数组:

char line[1000] = "";