関数の使い方に関して

[戻る]
K.O. 2002/09/09(月) 17:33:15
 int A,
 int B[10](ここは配列10個分と言う意味)
 FILE *C
 を与えて、
 関数を通して、
 int D[10](ここも配列10個分と言う意味)
 をMainに返したいのですが、
 何故か
 void FFF(A,B,D,C)
 としてMAINで呼んで
 関数では

 void FFF(int FA, int *FB, int *FD, 
 FILE *FC)
 {
 int a;
 :::::::::::
 U = *((char*)Buffer+j);
 fputc(U, FC); ←
 :::::::::::

 return;
 }
 と、定義してありますが、
 何故か、←の所で、ACCESS VIOLATION
 のエラーが出て、ここで止まってしまいます。
 (Debug Assertion Failed Expression:
 str != NULLと)
 ちなみにプログラムの頭では、
 static VOID* Buffer;
 static U;
 VOID FFF();
 と切っています。

 Mainの中で
 こう言ったコマンドを発行してもハングすることは無かったのですが、どうしたら、関数内の
ここで止まることなく、配列10個分
 が加工されて、MainにDとして帰って来るのでしょうか?
 (関数の切り方が悪いのかな?)

n [E-Mail] 2002/09/09(月) 19:48:01
ファイルを開く前にBufferをFFF()に渡してますよ(たぶん)。

n [E-Mail] 2002/09/09(月) 19:52:52
間違いました。
> Bufferを
ではなく
> fpを
です。

n [E-Mail] 2002/09/09(月) 20:18:48
何度もすいません。
> FILE *Cを
です。

K.O. 2002/09/09(月) 21:38:01
そうすると、中でOpenすればいいのでしょうか?

n [E-Mail] 2002/09/10(火) 15:17:11
FFF()の形式からして、FFF()を呼び出す前にOpenするべきでは。
こんな感じ:

void FFF( int FA, int *FB, int *FD, FILE *FC )
{
 :::::::::::
}

int main( ... )
{
 FILE *C;
 C = fopen( ... );

 /*ファイルオープンに成功したかどうかのチェック*/
 if ( NULL == C )
 {
   /*成功しなかった場合の処理(return -1;とか)*/
 }

 /*ファイルオープンを確認してからFFF()に渡す*/
 FFF( ... , C );

 ::::::::::
}

古いスレッドには追加発言できません。