2014-05-16 44 views
-2

在C中,我想從文件中讀取一些符號,並且對於它們中的每一個,我想將它們反向寫入。例如,如果輸入是:abcdef我希望輸出是:badcfe。C從文件中讀取並寫入反向

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

FILE *f,*g; 

int main(int argc,char *argv[]) 
{ 
    if((f=open(argv[1],O_RDONLY))==NULL) 
    { 
     fprintf(stderr,"Open file error: %s\n",argv[1]); 
     return 1; 
    } 

    if((g=open(argv[2],O_WRONLY|O_TRUNC|O_CREAT,O_RDWR))==NULL) 
    { 
     fprintf(stderr,"Open file error: %s\n",argv[2]); 
     fclose(f);   
     return 1; 
    } 

    int nr; 
    char *buffer; 
    buffer=(char *)malloc(sizeof(char)); 
    char *bufferOut=buffer; 

    while((nr=read(f,buffer,2*sizeof(char))>0)){ 
     bufferOut[1]=buffer[0]; 

     bufferOut[0]=buffer[1]; 
     if(write(g,bufferOut,2*sizeof(char))!=2*sizeof(char)){ 
      printf("Writing ERROR!"); 
      return 1; 
     } 
    } 
    close(f); 
    close(g); 
    return 0; 
} 

執行後,當我開G,內容是:aaccee

我在Linux上。

+5

而你的問題是? – this

+2

您只有一個緩衝區(帶有兩個指針)。 「buffer」和「bufferOut」都指向相同的內存。 – iveqy

+0

非常感謝,我是個白癡!:) –

回答

2

我覺得你的問題是在這行代碼:

bufferOut[1]=buffer[0]; 

bufferOut[0]=buffer[1]; 

BUFFEROUT和緩衝區都指向相同的內存區的基礎上,在這裏這些行:

char *buffer; 
buffer=(char *)malloc(sizeof(char)); 
char *bufferOut=buffer; 

這不是執行你想要的交換。由於bufferOut和buffer指向相同的內存區域,因此您將bufferOut [0]和bufferOut [1]分配給相同的值。嘗試將bufferOut [1]的原始內容存儲在臨時變量中,然後將其分配到bufferOut [0]中。

1

正如aglasser指出的那樣,該問題是:

bufferOut[1]=buffer[0]; 

這行導致BUFFEROUT的原始內容[1]〜丟失。成功的交換需要額外的存儲。也許以下將有所幫助:

char ch = bufferOut[1]; 
bufferOut[1]=buffer[0]; 
bufferOut[0]=ch;