在C中我想从文件中读取一些符号,并且对于每两个符号,我想将它们反向写入。例如,如果输入是:abcdef我希望输出为:badcfe。
#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上。
答案 0 :(得分:2)
我认为您的问题出在以下几行代码中:
bufferOut[1]=buffer[0];
bufferOut[0]=buffer[1];
bufferOut和buffer指向相同的内存区域,基于以下这些行:
char *buffer;
buffer=(char *)malloc(sizeof(char));
char *bufferOut=buffer;
这不执行您想要的交换。由于bufferOut和buffer指向相同的内存区域,因此您将bufferOut [0]和bufferOut [1]分配给相同的值。尝试将bufferOut [1]的原始内容存储在临时变量中,然后将其分配到bufferOut [0]中。
答案 1 :(得分:1)
正如aglasser所指出的,问题是:
bufferOut[1]=buffer[0];
此行导致bufferOut [1]的原始内容丢失。成功的交换需要额外的存储空间也许以下内容会有所帮助:
char ch = bufferOut[1];
bufferOut[1]=buffer[0];
bufferOut[0]=ch;