簡體   English   中英

無法使用 fread() 在 C 中讀取文件

[英]Can't read file in C using fread()

程序要求輸入並將其存儲在一個變量中,然后確認打印文件內容的操作。 或者至少它必須,當程序結束時它不打印文件內容,我似乎找不到答案,我一直在尋找文檔,但無法真正弄清楚。

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

int main(void)
{
    FILE * file1 = fopen(".out", "w+");

    char *s = malloc(513);
    fgets(s, 513, stdin);
    
    if (fprintf(file1, "%s", s) < 0)
    {
        printf("Something failed while writing to the file\n");
        return 1;
    }
    else
    {
        char *t = malloc(513);
        fread(t, sizeof(char), 1, file1);
        printf("Success! Input was: %s \n", t);
        return 0;
    }
}

PS:對C非常陌生,盡管對您來說似乎很明顯,但我一無所知。

這里有 2 個問題,1 - 你寫了文件處理程序並且你試圖從那一點開始讀取 - 你沒有rewind文件指針! 2 - 你只是在閱讀 1 個字符,而不是你寫給它的數量!

#include <string.h>

...

        int n = strlen(s);
        rewind(file1);   // rewind before read 
        fread(t, sizeof(char), n, file1);   // read as much as you wrote

您的代碼中的一些問題:

  1. 您沒有檢查fopen()malloc()fgets()fread()的返回值。
  2. 您正在將一個字符寫入輸出流,而不是倒帶。

您的代碼應如下所示:

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

int main(void)
{
    FILE * file1 = fopen(".out", "w+");
    if (!file1) {
        printf("Could not open file.\n");
        return 1;
    }

    const size_t n = 513; // Use constants, not litterals.
    char *s = malloc(sizeof(char) * n);
    if (!s) {
        printf("Internal error.\n");
        fclose(file1);
        return 1;
    }
    
    if (!fgets(s, n, stdin)) {
        printf("Input failed.\n");
        fclose(file1);
        return 1;
    }
    
    if (fprintf(file1, "%s", s) < 0) {
        printf("Something failed while writing to the file\n");
        fclose(file1);
        return 1;
    }
    
    char *t = malloc(sizeof(char) * n);
    if (!t) {
        printf("Internal error.\n");
        fclose(file1);
        return 1;
    }
    
    rewind(file1);
    
    int ret = fread(t, sizeof(char), n, file1); // Read n characters, not 1.
    if (ret != strlen(s)) {
        if (feof(file1)) {
            printf("Error reading .out: unexpected end of file.\n");
        } else if (ferror(file1)) {
            perror("Error reading .out");
        }
        fclose(file1);
        return 1;
    }
    
    printf("Success! Input was: %s \n", t);
}

暫無
暫無

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

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