C - вывести содержимое обратного файла в стандартный вывод - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы прочитать содержимое файла и распечатать его содержимое. Только используя fopen, fgets, fputs, fclose. Это то, что я сделал, однако ничего не печатается.

#include <sys/types.h>                                                          
#include <sys/stat.h>                                                           
#include <sys/fcntl.h>                                                          
#include <unistd.h>                                                             
#include <stdio.h>                                                              

int main(int argc, char *argv[])                                                
{                                                                               
    if (argc != 2)                                                              
    {                                                                           
        return 1;                                                               
    }                                                                           
    FILE *f = fopen(argv[1], "r");                                              
    if (f == NULL)                                                              
    {                                                                           
        return 2;                                                               
    }                                                                           
    char buffer[4096];                                                          
    char reversed[4096];                                                        
    char *line = fgets(buffer, 50, f); //read 50 characters at a time                                   
    int length = 0;                                                             
    int j = 0;                                                                  
    while (line != NULL)        // while end of file not reached                                                 
    {                                                                           
        length = 0;                                                             
        j = 0;                                                                  
        for (char *temp = buffer; *temp != '\0'; temp++)    //find length of buffer                 
        {                                                                       
            length += 1;                                                        
        }                                                                       
        for (int i = length; i > 0; i--)          // reverse buffer                              
        {                                                                       
            reversed[j] = buffer[i];                                            
            j += 1;                                                             
        }                                                                       
        fputs(reversed, stdout);                                                
        line = fgets(buffer, 50, f);                                            
    }                                                                           
    fclose(f);                                                                  
    return 0;                                                                   
}

вывод:

(nothing)

пример:

abcdef
ghi

ожидаемый вывод:

fedcba
ihg

1 Ответ

1 голос
/ 30 сентября 2019

Вы начинаете с неправильного смещения в

for (int i = length; i > 0; i--)          // reverse buffer

и переключаетесь на

for (int i = length - 1; i >= 0; i--)    // reverse buffer

В противном случае вы меняете / меняете терминатор NUL и получаете пустую строку

...