重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語のランダムアクセス(fseek)で、
アクセス位置を「ファイル末尾」に設定したいのですが
どうも自分で作成したソースは正常に動いてくれません。
(常にアクセス位置が先頭になってしまいます)

何かが間違ってるのは確かなのですが、
もし原因がお判りの方がいらっしゃいましたら
アドバイスをお願いします。

動作としては、追記書き込みみたいな感じで
どんどん同一ファイルに書きこんで行く感じです

――――――――――――――――――――――――――
#include<stdio.h>
#include<string.h>

// 書き込み関数
bool Write( char *fname, char *str ){
FILE*fp = NULL;
intlen = (int)strlen(str);

fp = fopen( fname, "wb" );
if( !fp )return false;

fseek( fp, 0L, SEEK_END );
printf( "位置:%d\n", ftell(fp) );
fwrite( &str, len, 1, fp );

fclose( fp );
return true;
}

// メイン関数
int main(){
char*fname = "Test.txt";
Write( fname, "テスト" );
Write( fname, "教えて" );
Write( fname, "goo" );
return 0;
}


――――――――――――――――――――――――――
動作結果:
  Test.txtの中身「goo」
動作してほしい結果:
  Test.txtの中身「テスト教えてgoo」
(※中身はバイナリ形式です)

A 回答 (2件)

Write関数で、毎回新規書き込みモード("w")で


ファイルをオープンしているのがまずいと思います。

それから、fwrite関数呼び出し時の第1引数は、&strでよいのでしょうか?
    • good
    • 0
この回答へのお礼

有難うございます。
書き込みは無事できましたが、
書き込む変数にも誤りがあったようですね。
無事できました。

お礼日時:2008/04/07 17:48

単純にアペンドモードでファイルを開いていないから、


Write() を呼び出すたびにファイルがゼロバイトに切り詰められているのでは?
    • good
    • 0
この回答へのお礼

有難うございます。
ほんと単純なミスですね・・・
無事できました。

お礼日時:2008/04/07 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!