簡體   English   中英

C程序逐行讀取文本文件,然后將這些行打印到終端

[英]C program to read a text file line by line then print out those lines to the terminal

我想讓ac程序逐行讀取文本文件,然后將這些行打印到終端。

我的密碼

#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循環不起作用,但是我不確定為什么。

您的循環無法正常工作,因為fscanf不會在成功返回僅返回1

根據fscanf的手冊頁,返回值具有以下含義:

返回值

成功后,這些函數將返回成功匹配和分配的輸入項的數量; 如果較早匹配失敗,則該值可以小於所提供的值,甚至為零。

如果在第一次成功轉換或匹配失敗發生之前到達輸入結束,則返回EOF值。 如果發生讀取錯誤,也會返回EOF,在這種情況下,將設置流的錯誤指示符(請參見ferror(3)),並設置errno來指示錯誤。

此外,如另一個答案中所述:您寫入的內存不是您的內存:

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);

您使用*line而不初始化它->未定義行為。

要解決此問題,可以改用char數組:

char line[1000] = ""; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM