
ファイルポインタが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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
改行までの一文字ずつのファイ...
-
fopen(ファイルパス)
-
ファイルサイズ指定し、ファイ...
-
【VB.Net】バイト型配列に読み...
-
fgetsで2行目から文字化け
-
fopenで開いたファイルのサイズ...
-
テキストファイルを分割するプ...
-
バイナリファイルをテキストフ...
-
続・EOF判定されない
-
DOSでメモ帳を開いても改行され...
-
EOF判定されない
-
winsock recvでの文字化け
-
C言語 バイナリファイルの読み...
-
Access クエリ実行が急に非常に...
-
C言語初心者の質問失礼します。
-
FTPでputすると空ファイルが出...
-
バッファとは何ですか
-
どんなプログラムを書いても指...
-
「UNCパスはサポートされません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイナリファイルをテキストフ...
-
EOF判定されない
-
ファイル内のデータを1行削除...
-
巨大なテキストファイル(可変...
-
テキストファイルの行数を取得...
-
fgetsで2行目から文字化け
-
改行までの一文字ずつのファイ...
-
ファイルサイズ指定し、ファイ...
-
c言語 2つのファイルを行ご...
-
0バイトファイルの作成
-
【VB.Net】バイト型配列に読み...
-
fprintfで出力するファイルのパ...
-
VBSで指定行に挿入
-
VS2010 MFC CStdioFileについて
-
複数テキストファイルを読み込...
-
ハフマン符号のプログラム
-
winsock recvでの文字化け
-
テキストファイルの文字列の削除
-
ファイル読み込みについて
-
freadとfwrite
おすすめ情報