failing to dump the input file reversed
I want to reverse the contents of the input file and display the reversed contents, but I am not getting it; i think I have made a logic error.
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
int main() {
char* c = malloc(10);
char* c1 = mallo开发者_JS百科c(10);
char ch, 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) {
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;
}
Here is an example program which loads the file into memory and then prints the content of the memory backwards to stdout.
#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;
}
Input text:
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.
Output text:
.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
精彩评论