簡體   English   中英

我不明白fgets是如何創建段錯誤的

[英]I don't understand how fgets is creating a seg-fault

我有一個任務要編寫一個程序,該程序將復制帶有2個參數(filePaths)並將第一個文件復制到第二個文件中。 據我所知,我應該使用fgets。 我似乎可以正常工作,直到無法檢測到文件末尾為止。 根據我讀過的所有內容,似乎fgets應該在它到達文件末尾時停止並返回null或其他內容,但是如果我允許,它將繼續讀取文件的最后一行。 這是代碼。 我不需要答案(這是家庭作業),我只想了解自己在做什么,所以我可以自己獲得答案:

#include <stdio.h>
#define BUFFER_SIZE 80

int readLineFromFile(FILE* file, char* buffer) {

    if(! *fgets(buffer, BUFFER_SIZE, file)) {
        return -1;
    }
    int length;
    for(length=0; buffer[length] != '\0'; length++);
    return length;
}

void writeLineToFile(FILE* file, char* buffer) {
    fprintf(file, "%s", buffer);
}

int main(int argc, char **argv) {
    if (argc != 3) {
        printf("incorrect number of arguments, 2 text files expected, recieved %d\n", argc - 1);
        return 0;
    }
    FILE* input = fopen(argv[1], "r");
    FILE* output = fopen(argv[2], "w");
    char buffer[BUFFER_SIZE];
    int charsRead = readLineFromFile(input, buffer);
    int i;
    while(0 < charsRead) {
        writeLineToFile(output, buffer);
        charsRead = readLineFromFile(input, buffer);
        printf("%d\n", i++);
    }
    fclose(input);
    fclose(output);
    return 0;
}

我認為問題出在if(! *fgets(buffer, BUFFER_SIZE, file)) {解引用函數。 我將*fgets更改為fgets ,它運行良好。 此處查看正確的代碼。 但是,為了獲得額外的信譽,請弄清楚如何使它適用於任何文件類型,而不僅僅是純文本。

暫無
暫無

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

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