
ファイルポインタがfgetしても動かなくなるような宣言の仕方や
引数の渡し方ってあるのでしょうか?
C言語で書いたプログラムです(長いので構造を書きます)
わかりにくければ補足します。
#include"stdio.h"
static FILE fp1;
main()
{
変数宣言うんぬん
プロトタイプ宣言うんぬん
fopen(.....);
a = kansuu;
fclose;
}
int kansuu()
変数宣言うんぬん
for(i=0;i<3;i++)
{
x=fgetc(fp1);
printf("%d-%d\n",x,ftell(fp1));
}
ファイルには
0123456789
出力が
0-0
0-0
0-0
ってなるんです
Seek関数(SEEK_CURとか)を使うとファイルポインタは動きます。
お願いします。
No.10
- 回答日時:
fgetc() の後に ungetc() でストリームに文字を
返してしまっていれば、ストリームポジションは
移動しません。しかし、そんなイレギュラーなことを
するとも思えません。
ファイルポインタが移動しないという障害状況が
起こったなら、いかにして起こったのかということに
こちらもちょっと興味があります。勘違いだったと
しても、そういった誤解の起こりやすい状況というのを
後学の為に知りたいというのもあるので、もしまだ
未解決なのであれば、なんとかソースの抜粋を載せて
みることはならんでしょうか?どんな感じか知りたいす。
回答ありがとうございます。
サイズ0でした。
この問題が起きるちょっと前に
,"w"と,"r"を一回間違えてたことを思い出しました。
あと、
サイズ0のファイルでもfseekってできるんですね。
お騒がせしました。

No.7
- 回答日時:
#include <stdio.h>
void main()
{
int b;
FILE* f = fopen(filename, "r");
while ((b = fgetc(f)) != EOF)
printf("%d-%ld\n", b, ftell(f));
fclose(f);
}
これでも動きませんか?(思いっきり省略してるけど)

No.5
- 回答日時:
プログラムをすべて貼り付けたほうがいいのではないでしょうか。
すくなくとも、問題の for 文のある関数を書かなければ、回答が出ないと思いますよ。
回答ありがうございます。
>プログラムをすべて貼り付けたほうがいいのではないでしょうか。
え~
私もそうしたいのですが全部書くとものすごい量になってしますので・・・
私が尋ねたいことはfget関数を使ってもファイルポインタが
動かないことがありえるのかどうか
と、
もしありえるとすればどういったパターンの時か
です。
お答えしづらいとは思いますがお願いします。
No.3
- 回答日時:
>ただ、質問の趣旨とはちょっと・・・
えーっと、質問の回答としては fgetc 等でファイルポインタが動かないと言う設定はありません。
というのが前提で、例えば FILE fp1; と FILE* fp1; では意味が違いますし、fopen でしっかり fp1 にアドレスが入らなければその後の動作もおかしくなります。重要な部分でしたので指摘させてもらいました。
> if((fp1=fopen(("%s",argv[1]),"r"))==NULL){
if((fp1=fopen(argv[1],"r"))==NULL){
でよいと思います。式の優先順位の関係で、結果的には argv[1] が fopenに渡りますが、"%s" は意味がありません。#これも質問とは関係ありませんね、すいません。
No.2
- 回答日時:
int fgetc(FILE*)という関数は「文字コードを返す」という仕様のはずです。
printf("%d-%d\n", x, ftell(fp1))で最初の%dが0になるということは既におかしいですね。
ファイルの1文字目は'0'(文字のゼロ)なので0(数値のゼロ)に変換されることはないでしょう。
また、ftellはlong ftell(FILE*)のはずなので、printf("%d-%ld\n", x, ftell(fp1))でないとファイルポインタの位置は表示できないと思います。
この回答への補足
すみませんでした。
>%d-%d
ではなくて
%c-%ld です
ftell関数は結果が合わないから導入したものです。
ファイルポインタが動いていないのは確かです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルの行数を取得...
-
変数内の文字列を空にできない
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
InternetReadFileで大きいファ...
-
0x00をファイル出力
-
【C言語】テキスト読み込みの行...
-
アクセスカウンターが更新され...
-
改行までの一文字ずつのファイ...
-
freadでファイルを読み込んだ際...
-
テキストファイルの先頭への文...
-
VS2010 MFC CStdioFileについて
-
fopenで開いたファイルのサイズ...
-
複数テキストファイルを読み込...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
教えてください!vector works...
-
教えてください!vectorworksに...
-
Access クエリ実行が急に非常に...
-
「UNCパスはサポートされません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイナリファイルをテキストフ...
-
テキストファイルの行数を取得...
-
ファイル内のデータを1行削除...
-
巨大なテキストファイル(可変...
-
複数テキストファイルを読み込...
-
fgetsで2行目から文字化け
-
【VB.Net】バイト型配列に読み...
-
改行までの一文字ずつのファイ...
-
C言語での改行コードの扱いにつ...
-
InternetReadFileで大きいファ...
-
C/C++ ファイル入出力操作 (長...
-
fopenで開いたファイルのサイズ...
-
fopen(書き込みモード)でファイ...
-
テキストファイルの文字列の削除
-
ファイル読み込みについて
-
C言語のローカル変数の使い方に...
-
freadとfwrite
-
EOF判定されない
-
続・EOF判定されない
-
fortranで文字列を読み込む際の...
おすすめ情報