質問: NULL)) { fprintf(stderr, "ファイル%sが正しくオープンできません。\n", *argv); return 1; } else { copy(fp, stdout); fclose(fp); } } } return 0; } ``` この、ファイルを参照し内容をコピーするプログラムを実行したいのですが、 コマンドライン引数を渡す事ができていません。 ### 試したこと 過去の質問やそのほかネットで検索してみたところ、 ・「プロジェクト」から設定を行う。 ・コマンドプロンプトから実行する。 などの方法が見つかりましたが、自分のプロジェクトでは「(プロジェクト名)のプロパティ」 が表示されず、コマンドプロンプトは「Visual Studio コマンドプロンプト」を表示しましたが、パスのつなぎ方が分からず解決することができませんでした。 ![プロパティが表示されない](https://teratail.storage.googleapis.com/uploads/contributed_images/215abeb1da736e0f1a228e9c3dce8ad0.png) ### 補足 開発環境は「Visual Studio 2017」です。
回答: > > この、ファイルを参照し内容をコピーするプログラムを実行したいのですが、 > > コマンドライン引数を渡す事ができていません。 > > > この部分ですが、「ビルドは出来るが、実行するとコマンドライン引数を渡しても意図した通りの処理にならない」という解釈でOKでしょうか? ``` fopen_s(&fp, *++argv, "r"); if ((fp == NULL)) ``` この部分に問題がある様に思えます。 fopen_s()関数は、エラー発生時に第一引数を変更しません。 (参照:https://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx) ですので、「fp == NULL」という条件でファイルオープンの成功・失敗を判定しようとしても、上手く動きません。 ``` const errno_t result = fopen_s(&fp, *++argv, "r"); if ( result != 0 ) ``` この様に修正すれば、上記の問題は解決できます。