VC++6で使っています。
ある関数Aの中で
A(int *B, int C, int *D, float *E)
{
int i;
FILE *fu;
int r;
if (fu = fopen(F.doc,w) == NULL) /* Open CodeBook */
{
printf(file open error!!\n);
exit(1);
}
for (i = 0; i < 44; i++)
fputc(B[i],fu);
とやったら、実行時、いきなりi=0で上記fputでハングです。
確かに、このfputに入る直前に、B[0]~B[43]までを
実値で見れているのも確認しているし、
ここをB[i]の代わりに、5や30等の固定数字でやっても同じ。
if (r = fput(B[i],f) == NULL)
{
printf(File Writing Error! \n);
exit(2);
}
などと変えてもエラーの内容は、変わらないのですが、
==============================
Debug AssertionFailed!
Program:C:VC\DEBUG\TEST.EXE
File: fput.c
Line:45
Expression: str != NULL
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
==============================
一体何が悪いのでしょうか?
他の個所では特にMainの中で同等なfputをしても
通過しているのに。
又、別な次元の質問ですが、
parameter付きの戻り値を期待しない関数の中で
return;を書かなければ、確かに
コントロールはMainの方に戻っていくようですが、
何か不具合はあるのでしょうか?
> for (i = 0; i < 44; i++)
> fputc(B[i],fu);
>
>とやったら、実行時、いきなりi=0で上記fputでハングです。
>確かに、このfputに入る直前に、B[0]~B[43]までを
fput, fputc どっちでエラーなんでしょうか?
もし、fput だとしたら、 fput とはどんなものですか?
それに、状況からするとアサーションで引っ掛っているだけでハングアップ
ではない様ですが?
演算子の優先度を考慮してもう一度考えてみましょう。
>if (fu = fopen(F.doc,w) == NULL)
この部分は恐らく”F.docが開けなかったら”
を期待してるのでしょうが・・・
このあたりで Warningが出ると思いますが。
それとデバッグをまずしてみてください。
F9でブレークポイントを貼ってF5でデバッグ実行すれば
って世話の焼きすぎですか・・・^^;
↓でコンパイルエラーになりました。
> if (fu = fopen(F.doc,w) == NULL) /* Open CodeBook */
if ( (fu = fopen(F.doc,w) ) == NULL) /* Open CodeBook */
に変更すると、コンパイルも通り、ファイルも書き込まれました。
もともとはfputで使っていました。(今デバッグモードで見ています)
何故か今、fputchar
に変えてみたら通るようになりましたが、
今度はfcloseで、”ACCESS VIOLATION。fclose.cのパスを入力されたし。”、なるエラーが
出て来てしまいました。
if (fu = fopen(PreEnpd.wav,w) == NULL)
{
printf(file open error!!\n);
exit;
}
for (i = 0; i < 44; i++)
fputc(B[i],fu);
fclose(fu);
あと、書き忘れてましたが、このプログラムの場合は、
バイナリーモードを利用したほうがよいと思います。
fopen(F.doc,w)ではなく
fopen(F.doc,wb) とされたほうがよいと思います。
アイススケーターさんや私の意見は無視ですか・・・
寂しいですねぇ。
beginnerさんへ
時間軸から考えて、島さんに対するメッセージを検討中で
データが更新されているのをFjさんが気づかなかっただけじゃ
ないかと思います。
そのうち、何か書かれてきますよ。
そうなんです。
私も後で
if ((fu = fopen(F.doc,w)) == NULL)
にしないときずきました。
確かに時間的に当時はbeginnerさんの記事出ていなかったようです。
返事送れてすみません。
いいえ。こちらこそ大人気なくて申し訳ないです。
頑張ってください。