• ベストアンサー

VisualC++6.0 で main関数への引数

#include<stdio.h> int main(int argc,char *argv[]) {   FILE *fp;   fp=fopen("abc.txt","w"); } こんな感じの xyz という名前のプログラムがあります。 MS-DOSで、xyzと同じディレクトリから   xyz tekitou リターン と打ち込んでプログラムを起動させたらxyzと同じディレクトリの中に abc.txtを作成してくれます。xyz.exeのダブルクリック起動でも 同様の結果です。 だけどxyz.exeのアイコンの上に適当なファイルを ドラッグ&ドロップさせて起動させた場合 abc.txtは全然別の場所に作成されてしまいます。 正確に言うと、Windows98上でVisualC++6.0を使用して 上記のプログラムでデスクトップ上にxyz.exeを作成して (C:\WINDOWS\デスクトップ\xyz.exeの)アイコンに 適当なファイルをD&Dしてプログラムを実行したらC:\にabc.txtが できたということです。 私としては同じディレクトリ内に作成してくれなくては 都合が悪いのです。この現象が起きる理由あるいは 解決法をご存知の方がいらっしゃいましたらどうかよろしく お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#include "stdafx.h" #include "windows.h" int main(int argc, char* argv[]) { char buf[1024]; GetModuleFileName(NULL, buf, sizeof(buf)); // ここで // bufから xyz.exe を取り除き // テキストファイルのフルパスを生成する // ここで本来の処理 return 0; } GetModuleFileName()という関数を使えば xyz.exe の存在する位置のフルパスを取得できますから、それを使ってやればいいです。詳細はマニュアルを調べてください。

aaaaa
質問者

お礼

たいへんありがとうございます。 この方法を使えば完全に解決できました。

その他の回答 (1)

  • inoue64
  • ベストアンサー率29% (334/1115)
回答No.1

設定の変更が必要です xyz.exeを右クリック→プロパティ→プログラム→作業ディレクトリ これをC:\Windows\デスクトップに設定すればいいと思います

aaaaa
質問者

お礼

タブの出現方法を知りたかったのですが 本来の質問と大きく離れた内容なので 別の場で質問させてもらおうと思います。 たいへんありがとうございました。

aaaaa
質問者

補足

たいへんありがとうございます!! どうかもう一声お願いします。 xyz.exeを エル・エス・アイ ジャパン(株)の 「LSI C-86 Ver 3.3 試食版」 で作成したのならあなた様のおっしゃるとおりに解決できました。 ですがVCで作成した実行ファイルでは(私の環境では) 右クリック→プロパティ→・・・全般 のタブしかでてきません。 LSIで作成したものでは 全般、プログラム、フォント、メモリ、画面、その他 のタブが出てくるのですが・・・ VCでこれらの項目を出現させるにはどうしたらよいのでしょうか?