ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

初心者の為のC言語コミュの質問です!

  • mixiチェック
  • このエントリーをはてなブックマークに追加
void CodeExor(char finame[],char foname[],int key) {

FILE *fi,*fo; int value;

fi = fopen(finame,"rb"); if (fi == NULL) return; fo = fopen(foname,"wb"); if (fo == NULL) return;

while ((value = getc(fi)) != EOF) { putc(value ^ key,fo); }

fclose(fi); fclose(fo);
}

のif(fi==NULL) return;とif(fo==NULL) return; は 何をしてどういう意味があるのですか?

コメント(8)

fopen() でググると沢山情報得られると思いますが。
ちゃんと答えると、fopen()はエラーに遭遇した時はNULLを戻り値として返す仕様になってますのでエラー時には何もせずに呼び出し元に戻る、と云う動作を意図していると思います。
想定されて居るエラーは、"rb"のモードの時はファイルが存在しない、"wb"のモードの時はディスクが満杯、とかいった事です。
これより詳しくは適切なウェブサイトか良い参考書を当って下さい。
よくないサンプルだなぁ。
if (fo == NULL) return;
した場合、fiがopenしっぱなし。close漏れ。
fdの枯渇になる可能性があります。
そのなかで質問ですが、return 1;とかしなくても、return;だけで大丈夫ですか?

あとfopen関数の第一引数はダブルクォート(“)は必要ないですか?
> ぶどう畑 さん
関数の型、変数って、ご存じでしょうか?
まず、そこから学ぶことをおすすめします。
>>[005]
ありがとうございます。
そこから勉強してみたいと思います。
#includ <stdio.h>

void CntStr( const char* psz, int* pn ) {
if( '\0' == *psz ) {
return;
}
psz++;
(*pn)++;
CntStr( psz, pn );
}

int main( void ) {
const char* psz = "abcdef";
int n = 0;
CntStr( psz, &n );
printf( "%d\n", n );
return 0L;
}

たとえばこんな感じ。
上記の例だと文字列の終端を見つけるまでCntStr関数の中でCntStr関数を呼んでます。
こうやって、自分の中で自分を呼び出して処理していくのが再帰処理ですね。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

初心者の為のC言語 更新情報

初心者の為のC言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。