关于字符串:C-将反向文件内容打印到stdout

C - print reversed file contents to stdout

我想读取文件的内容并打印其内容的反面。 仅使用fopen,fgets,fputs,fclose。 这是我所做的,但是没有打印任何内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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;                                                                  
}

输出:

1
(nothing)

例:

1
2
abcdef
ghi

预期输出:

1
2
fedcba
ihg


您从错误的偏移量开始

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

切换到

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

否则,您将交换/反向NUL终止符并获得一个空字符串