if(( fin = fopen("C:test.txt","r")) == NULL)
{
printf("fileopenError\n");
exit(1);
}
以上の文で開けるとおもっていたのですがエラーも何もでず、開始時に落ちてしまいます。
どうしてでしょうか?
"C:test.txt" -> "C:\\test.txt"では?
編集 削除「」様の指定どおりに以下のエラーが発生しました
test.exe の 0x004125fc でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x0000000c を読み込み中にアクセス違反が発生しました。 。
ファイルがどうこうよりも,NULLポインタを逆参照したとか,そういう問題がありそうです。
まずはどこで問題が起きているのかを切り分けましょう。
mainの最初にブレークポイントを置いてステップ実行していけば,
問題が起こる場所はわかると思いますが。
YuO様ありがとうございます。
ブレークポイントを置いてステップ実行した結果がこの部分のエラーです。
これ以前の構文ではエラーは発見されませんでした。
こういうときは
エラーが起こりうる最小のコードで試すのが鉄則です。
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
FILE* fin;
if ( ( fin = fopen( "C:\\test.txt", "r" ) ) == NULL )
{
printf( "fileopenError\n" );
exit( 1 );
}
fclose( fin );
return 0;
}
だけにしても同様のエラーがでますでしょうか?
でなければ問題はここではないようですが。
Blue様ありがとうございます。
どうも違う部分がエラーの原因のようです。
どんどんわからなくなりました。
#include "stdafx.h"
#define ORIGBUFSIZ 1024
#define COMPBUFSIZ 1040
FILE *fin, *fout;
unsigned long origsize, compsize;
unsigned char origbuf[ORIGBUFSIZ];
unsigned char compbuf[COMPBUFSIZ];
void error(char *msg)
{
fprintf(stderr, "Error: %s\n", msg);
exit(1);
}
void do_compress()
{
fout=fopen("C:test.gz","rb");
while (1) {
origsize = fread(origbuf, 1, ORIGBUFSIZ, fin);
if (origsize == 0) {
fwrite(&origsize, sizeof origsize, 1, fout);
printf("圧縮終了");
break;
}
compsize = COMPBUFSIZ;
compress(compbuf, &compsize, origbuf, origsize);
fwrite(&compsize, sizeof compsize, 1, fout);
fwrite(compbuf, compsize, 1, fout);
printf("圧縮中・・・");
}
}
void main()
{
if((fin = fopen("C:test.txt","r"))==NULL)
{
printf("fileopenError\n");
exit(1);
}
do_compress();
fclose(fin);
fclose(fout);
}
とりあえず、まともにみていないけど
> fout=fopen("C:test.gz","rb");
> if((fin = fopen("C:test.txt","r"))==NULL)
はわざと?
はい。わざとです。
編集 削除いや
> "C:test.txt" -> "C:\\test.txt"では?
の指摘を受けた上で、なぜそのように書くのかということです。
> fout=fopen("C:test.gz","rb");
は
fout=fopen("C:\\test.gz","rb");
だし
> if((fin = fopen("C:test.txt","r"))==NULL)
は
if((fin = fopen("C:\\test.txt","r"))==NULL)
と直して、ソースを載せてもらいたかったということ。
Blueさまご指摘ありがとうございます。確かにそうですね。
ちょっとわからなくてテンパりぎみですみません。
いや別に C: のカレントディレクトリの test.txt を開きたいのかもしれないし
ツッコミ方向としてはちょっと違うような気がします。
# それが原因であろうことはほぼ間違いないと思われるが...
> compress
はVC(6では)で標準でないようですが、どこぞのライブラリを使っているのでしょうか?
それと、今頃ですが、環境を明示しておきましょう。
OS:
VCのVersion:
プロジェクトの種類:
その他のライブラリ情報:
OS:XPPRO
VCのVersion:.NET
プロジェクトの種類:Win32コンソールアプリ
その他のライブラリ情報:zlibライブラリ
どうにか完走するようになりましたがファイルを書き込んでくれないです。
どんどん方向性がずれていって申し訳ありませんorz
fout=fopen("C:test.gz","rb");
は
fout=fopen("C:\\test.gz","wb");
では?
fout=fopen("C:\\test.gz","wb");
に変更したらファイルを出力するようになりました。
ありがとうございます。
> fout=fopen("C:test.gz","rb");
> は
> fout=fopen("C:\\test.gz","wb");
> では?
本当だ。。。全然きづかなかなった。 orz
fout=fopen("C:test.gz","wb");
から
fout=fopen("C:\\test.gz","wb");
への変更と
fout=fopen("C:\\test.gz","rb");
から
fout=fopen("C:\\test.gz","wb");
への変更でどうにかなりました。
皆様ありがとうございました。