ページ 11

system

Posted: 2017年8月22日(火) 21:16
by にこよん
ファイルをドロップしたら起動するexeファイルをC言語で
ファイルがドロップされたかのようにパスを渡して起動する方法を教えてください。

↓のは作成したexeファイルにファイルをドロップするとそのままtest.exeにパスを渡して起動しようとしたのですが、
これでは動きません
デバッグするとtest.exeにブレークポイントが発生しましたと出ます

コード:


#include <windows.h>
#include <stdio.h>

char path[512];
char name[512];

int main(int argc, char* argv[]) {
	if (argc != 2) {
		printf("ファイルをドロップして開いてください\n");
		printf("\n\n終了するにはEnterキーを入力してください...\n");
		getchar();
//		return -1;
	}
	strcat_s(path, argv[1]);

	sprintf_s(name, 512, "test.exe %s", path);

	system(name);

	printf(name);
	getchar();

	return 0;
}

Re: system

Posted: 2017年8月22日(火) 21:59
by みけCAT
昔system関数を使った時に引数が(ダブルクオーテーションで囲っても)上手く渡せなかったような気がしますが、
提示されたコードではそれ以前にstrcat_sを使っているのにstring.hがインクルードされていない上、
strcat_sは(Visual StudioのものN1570 K.3.7.1.3のものともに)3引数をとるはずなのに2引数しか渡していないのがパット見でやばそうですね。
system関数が使われているのにstdlib.hがインクルードされていないという問題もありますね。
さらに、入力された%が渡される可能性があるのにprintf(name);を呼び出しているのも危険ですね。

Re: system

Posted: 2017年8月23日(水) 10:15
by にこよん
なくてもコンパイルできるのにincludeしないといけないファイルがあるのですか...


>3引数をとるはずなのに2引数しか渡していないのがパット見でやばそうですね。
これ3引数だったんですね...ありがとうございました。修正しました。

他にもいろいろ変えて起動したらやっと動きました。
主だった原因はわらなくなってしまいましたが、動く用にはなりました。
ありがとうございました。

Re: system

Posted: 2017年8月23日(水) 16:40
by asd
にこよん さんが書きました: 他にもいろいろ変えて起動したらやっと動きました。
主だった原因はわらなくなってしまいましたが、動く用にはなりました。
ありがとうございました。
せめて動くようになったという最終的なソースコードを貼っておくと後から見た人の参考になると思います。

Re: system

Posted: 2017年8月24日(木) 03:43
by にこよん
asd さんが書きました: せめて動くようになったという最終的なソースコードを貼っておくと後から見た人の参考になると思います。
上に貼ったのは仮のサンプルコードで直したのは別のコードになるので解決方法としてのコードを貼ることはできません。

Re: system

Posted: 2017年8月24日(木) 14:26
by asd
にこよん さんが書きました:
asd さんが書きました: せめて動くようになったという最終的なソースコードを貼っておくと後から見た人の参考になると思います。
上に貼ったのは仮のサンプルコードで直したのは別のコードになるので解決方法としてのコードを貼ることはできません。
そうですか。それであれば仕方ないですね。