ファイルの文字を入れ替えるプログラムをつくりたいです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者A

ファイルの文字を入れ替えるプログラムをつくりたいです

#1

投稿記事 by 初心者A » 14年前

初投稿です。よろしくおねがいします。
ファイル1に対して、ファイル2を実行すると、ファイル1の中の文をひっくり返してファイル2に保存するプログラムが作りたいです。



#include<stdio.h> /*ヘッダファイルstdio.hをインクルード*/
#include<fcntl.h> /*ヘッダファイルfcntl.hをインクルード*/
#include<sys/types.h> /*ヘッダファイルsys/types.hをインクルード*/
#include<sys/stat.h> /*ヘッダファイルsys/stat.hをインクルード*/
#include<stdlib.h> /*ヘッダファイルstdlib.hをインクルード*/
#include<unistd.h> /*ヘッダファイルunistd.hをインクルード*/

int main(int argc,char **argv){
/*int型で引数にint型のargcとchar型のargvを持つmain関数を宣言*/
int fd1,fd2; /*int型変数fd1,fd2を宣言*/
int n,i; /*int型変数n,iを宣言*/
char buf1[512],buf2[512]; /*char型のbuf1,buf2を宣言*/

fd1=open(argv[1],O_RDONLY);
fd2=open(argv[2],O_WRONLY|O_CREAT,0600);
while((n=read(fd1,buf1,sizeof(buf1)))>0){
/*while文よりnにfd1のbufの大きさを読み込み0より大きいなら*/
for(i=n+1;i>=0;--i)
/*for文よりiにnを代入しiが0以上ならiから1を引く*/
buf2=buf1[n-i];
/*buf2にbuf1[n-i]を入れる*/
write(fd2,buf2,n+1);
/*fd2にbuf2の中のn+1分の文字を書き込む*/
}
close(fd1); /*fd1を閉じる*/
close(fd2); /*fd2を閉じる*/
return(0); /*返値なし*/
}

これで実行をしてみたのですが、
「abcdefg」が「gfedcbb」となって、最後の文字がおかしくなります。
どこか問題があったのでしょうか

よろしくおねがいします

non
記事: 1097
登録日時: 14年前

Re: ファイルの文字を入れ替えるプログラムをつくりたいです

#2

投稿記事 by non » 14年前

>for(i=n+1;i>=0;--i)
>/*for文よりiにnを代入しiが0以上ならiから1を引く*/
>buf2=buf1[n-i];

ここで、i=n+1のとき、
buf1[n-i]のn-iはn-(n+1)なので-1になりますから、考え方がおかしいのでは?
non

閉鎖

“C言語何でも質問掲示板” へ戻る