2011-04-19 60 views
0
#include<stdlib.h> 
#include<errno.h> 
#include<stdio.h> 
int main() 

{ 

    char *c=NULL,*c1,ch; 
    c=(char*)malloc(10*sizeof(char)); 
    c1=(char*)malloc(10*sizeof(char)); 
    char arg1[100],arg2[100]; 
    int i,count=0; 
    FILE *fp,*fq; 
    printf("Name of the file:"); 
    scanf("%s",arg1); 
    fp=fopen(arg1,"w+"); 
    if(fp==NULL) 

    { 

     perror("Failed to open file"); 
     return errno; 

    } 

    printf("\t\t\t%s\n\n",arg1); 
    printf("\t\tInput the text into the file\n"); 
    printf("\t\tPress Ctrl+d to the stop\n"); 
    while((*c=getchar())!=EOF) 

    { 

     fwrite(c,1,sizeof(c),fp); 
     count++; 

    } 

    printf("\n\n"); 
    fclose(fp); 
    fp=fopen(arg1,"w+"); 
    printf("Name of the output file:"); 
    scanf("%s",arg2); 
    printf("Reversing the contents of the file.......\n"); 
    fq=fopen(arg2,"w+"); 
    printf("\t\t%s\n\n",arg2); 
    for(i=1;i<=count;i++) 
    { 

     fseek(fp,-(i+1),SEEK_END) 
     fwrite(c1,1,sizeof(c1),fq); 

    } 
    printf("Done....Opening the file\n"); 
    rewind(fq); 
    for(i=0;i<=count;i++) 
    { 
      ch=getc(fp); 
      putc(ch,stdout); 
    } 
    fclose(fp); 
    fclose(fq); 
    return 0; 
} 

我想扭转输入文件的内容,并希望显示反转的内容,但我没有得到它;我认为我犯了一个逻辑错误。没有开始所需的输出

+6

你得到什么输出?你有什么试图解决这个问题?你怎么知道它不工作? – 2011-04-19 16:11:27

+0

如果文件内容很小,则可能需要将所有内容加载到内存中,然后在那里将其反转。那个'fseek(...)'和'rewind()'对我来说看起来效率非常低。 – abeln 2011-04-19 16:14:02

+0

我已经编译了我的linux上的程序,我无法得到反转内容的输出 – 2011-04-19 16:14:50

回答

2

这是一个示例程序,它将文件加载到内存中,然后将内存的内容向后打印到标准输出。

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

/* get the size of the file. No error checking here! */ 
long get_filesize(FILE *fp) 
{ 
    long fsize; 

    fseek(fp, 0, SEEK_END); 
    fsize = ftell(fp); 
    rewind(fp); 

    return fsize; 
} 

int main(int argc, char *argv[]) 
{ 
    if(argv[1] == NULL) return EXIT_FAILURE; 

    FILE *input; 
    unsigned char *data; 
    long filesize; 
    int i; 

    /* open target file */ 
    input = fopen(argv[1], "rb"); 
    if(input == NULL) exit(EXIT_FAILURE); 

    /* retrieve size of the file */ 
    filesize = get_filesize(input); 
    if(filesize < 1) exit(EXIT_FAILURE); 

    /* allocate space for the file */ 
    data = malloc(filesize * sizeof(unsigned char)); 
    if(data == NULL) exit(EXIT_FAILURE); 

    /* read the file into buffer and close the file handle */ 
    fread(data, filesize, sizeof(unsigned char), input); 
    fclose(input); 

    /* print the file content from end to beginning */ 
    for(i = --filesize; i >= 0; --i) 
     putchar(data[i]); 

    /* free the data buffer memory */ 
    free(data); 

    return EXIT_SUCCESS; 
} 

输入文本:

Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
when an unknown printer took a galley of type and scrambled it to make a type 
specimen book. 

输出文本:

.koob nemiceps epyt a ekam ot ti delbmarcs dna epyt fo yellag a koot retnirp 
nwonknu na nehw ,s0051 eht ecnis reve txet ymmud dradnats s'yrtsudni eht neeb 
sah muspI meroL .yrtsudni gnittesepyt dna gnitnirp eht fo txet ymmud ylpmis si 
muspI meroL 
+0

@Athabaska,您的程序在分配的缓冲区外访问内存对于'data' - 你需要一个' - 1'在那里。在'malloc'调用中'sizeof(unsigned char)'也没有任何理由 - 它总是会变成'1'。 – 2011-04-19 17:41:21

+0

已经修复。这个stackoverflow系统是讨厌的。有人总是在我修正错误时同时发表评论。但没有冒犯。很高兴有人抓住这些令人讨厌的C错误。至于'sizeof(unsigned char)',通常我只是为了便携性而添加它。我认为这是一个很好的做法。 – 2011-04-19 17:46:33

+0

@Athabaska - 没有汗水,只是想帮助! – 2011-04-19 17:48:55