NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

ファイルの先頭部分の読み出し

投稿者: さん  2004/01/12 03:47  MLNo.408   [メール表示]

はじめまして、Masatoと言います。
ファイルの先頭100KBで判断しようと思い
読み出してみたのですが思うように読み出せず悩んでいます。
FILE *fp;
const int hdsize=102400;
char *buf=new char[hdsize];

if((fp=fopen(path,"rb"))==NULL)
{//ファイルオープンエラー
}

if(fread(buf,sizeof(char),hdsize!=hdsize)
{//!!
//Debug出力
fclose(fp);
fp=fopen("C:\\out.txt","wb");
fprintf(fp,"buf=%s\nstrlen=%i\n",buf,strlen(buf));
fclose(fp);
}〜〜〜〜

上記のコードの!!の部分に入ってしまいます。
出力したファイルの中身は以下のようになっていました。
buf=RIFF"ミ+AVI LIST~"
strlen=18
元ファイルは少なくとも100kb以上の長さなのでこんなに短いはずもなく
buf=RIFF"ミ+AVI LIST~"hdrlavih8………
と長々と続くことを想像しているのですがなぜか途中で切れてしまっています。
これはなぜでしょうか?
よろしくお願いします。


このエントリーをはてなブックマークに追加


  • MLNo.409   "Isao SHIMAKURA"さん  (0) 2004/01/12 17:00  [メール表示する]
     島倉です。

    > fprintf(fp,"buf=%s\nstrlen=%i\n",buf,strlen(buf));
    (中略)
    > 元ファイルは少なくとも100kb以上の長さなのでこんなに短いはずもなく
    > buf=RIFF"ミ+AVI LIST~"hdrlavih8………
    > と長々と続くことを想像しているのですがなぜか途中で切れてしまっています。
    > これはなぜでしょうか?

     C言語の文字列は終端文字(のコードのところ)で終わりとみなさ
    れるからです。

     freadの戻り値が期待したものでない原因は提示されたコードか
    らは(コンパイルすらできないので)分かりません。

    Isao SHIMAKURA (ISLe)
    isle.shimakura@…

    ----- Original Message -----
    From: "Masato" <ml12355@…>
    To: <beginers@…>
    Sent: Monday, January 12, 2004 3:46 AM
    Subject: [beginers:0408] ファイルの先頭部分の読み出し


  • MLNo.410   piggyさん  (0) 2004/01/12 23:02  [メール表示する]
    > 上記のコードの!!の部分に入ってしまいます。

    はじめまして.最近本 ML に参加しました ku-ta と申します.
    プログラミングを始めてからまだ日が浅く,諸先輩方に色々
    ご教授いただければと思っています m(__)m
    以後宜しくお願い致します.

    ---
    ソース・コードにミスタイプ (freadの使い方) があるので何とも
    言えませんが,間違ってはいないように見えます.こちらで実験したときには
    思った通りの結果が得られました.

    ただ,下のデバッグ・コードは間違っていると思います.
    バッファ内のバイナリ・データを strlen() で文字列出力しようと
    しても,ナル値 (0x00) が見つかれば文字列の終端と見なされて
    意図しない結果となります.

    あと,下のソースではファイル・オープン・エラー時の中身が
    空ですが,実際には適当な処理とか入ってるんですよね?

    > FILE *fp;
    > const int hdsize=102400;
    > char *buf=new char[hdsize];
    >
    > if((fp=fopen(path,"rb"))==NULL)
    > {//ファイルオープンエラー
    > }
    >
    > if(fread(buf,sizeof(char),hdsize!=hdsize)
    > {//!!
    > //Debug出力
    > fclose(fp);
    > fp=fopen("C:\\out.txt","wb");
    > fprintf(fp,"buf=%s\nstrlen=%i\n",buf,strlen(buf));
    > fclose(fp);
    > }〜〜〜〜
    >
    > 上記のコードの!!の部分に入ってしまいます。



メールへの返信はMLのメンバーしかできません。

更新順メールリスト