なぜエラーなのか。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
helloworld1853
記事: 181
登録日時: 13年前

なぜエラーなのか。

#1

投稿記事 by helloworld1853 » 13年前

あるプログラムを作っているのですが、

fwriteで致命的なエラーが起きます。

そのプログラムはあまりにも長く解読が困難なので、

大幅に省略しました。

なぜ動作しないのでしょうか。

回答お願いします。

コード:

#include<stdio.h>
#include<string.h>
FILE *fp_exe;
char body_buff_exe[] = "MZ";
int Mysearch_exe()
{
	fwrite( body_buff_exe, sizeof( char ), strlen( body_buff_exe ), fp_exe );
	fclose(fp_exe);
	return 0;
}
int main()
{
	char exe_filename[] = "C://test.exe";
	char *fname_exe;
	fname_exe = exe_filename;
	fp_exe = fopen( fname_exe,"wb" );
	if( fp_exe == NULL )
	{
		puts("fopen失敗");
		return -1;
	}
	Mysearch_exe();
	return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: なぜエラーなのか。

#2

投稿記事 by softya(ソフト屋) » 13年前

確か前々から注意しているはずですがバイナリデータで文字列関数のstrlenを使うのは止めて下さい。
0x00=ナル文字を見つけるまでの長さがstrlenですのでバッファが0x00以外で埋まっていたら何処まで検索に行くか保証ができません。
あとバイナリデータ中に0x00があればそこで停止します。

で、どんなエラーが出るんでしょうか? fopenに失敗するなら分かるんですが。
それとCドライブ直下にファイル書くのはWindws7/Vistaが制限していはず・・・。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

helloworld1853
記事: 181
登録日時: 13年前

Re: なぜエラーなのか。

#3

投稿記事 by helloworld1853 » 13年前

>それとCドライブ直下にファイル書くのはWindws7/Vistaが制限していはず・・・。

これが原因だったようです。

制限されていたのでfopenが失敗し、

fwriteが失敗したという感じでした。

>確か前々から注意しているはずですがバイナリデータで文字列関数のstrlenを使うのは止めて下さい。

そうでしたね。今回の場合はsizeofでした。

どうしてもstrlenを使う癖があったので注意します。

回答してくださってありがとうございます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: なぜエラーなのか。

#4

投稿記事 by softya(ソフト屋) » 13年前

あと
C://test.exe
じゃなく
C:/test.exe
だと思います。
://はURLの書き方でファイルパスでは使いません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: なぜエラーなのか。

#5

投稿記事 by みけCAT » 13年前

softya(ソフト屋) さんが書きました:あと
C://test.exe
じゃなく
C:/test.exe
だと思います。
://はURLの書き方でファイルパスでは使いません。
C:\\test.exe
(エスケープシーケンス)と混ざっているのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: なぜエラーなのか。

#6

投稿記事 by softya(ソフト屋) » 13年前

みけCAT さんが書きました:
softya(ソフト屋) さんが書きました:あと
C://test.exe
じゃなく
C:/test.exe
だと思います。
://はURLの書き方でファイルパスでは使いません。
C:\\test.exe
(エスケープシーケンス)と混ざっているのでしょうか?
ああ、なるほど。そういう事でしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る