質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

8792閲覧

Visual studio 2017 C++でのコマンドライン実行

supermasuo1

総合スコア7

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/04/26 09:26

前提・実現したいこと

コマンドライン引数を渡して、ファイルの内容をコピーするプログラムを実行したい。

発生している問題・エラーメッセージ

Cの基礎学習の最中なのですが、コマンドライン引数の分野で行き詰まってしまっています。

C

1#include <stdio.h> 2 3void copy(FILE *src, FILE *dst) 4{ 5 int ch; 6 7 while ((ch = fgetc(src)) != EOF) 8 { 9 fputc(ch, dst); 10 } 11} 12 13int main(int argc, char *argv[]) 14{ 15 FILE *fp; 16 17 if (argc < 2) 18 { 19 copy(stdin, stdout); 20 } 21 else 22 { 23 while (--argc > 0) 24 { 25 fopen_s(&fp, *++argv, "r"); 26 27 if ((fp == NULL)) 28 { 29 fprintf(stderr, "ファイル%sが正しくオープンできません。\n", *argv); 30 return 1; 31 } 32 else 33 { 34 copy(fp, stdout); 35 fclose(fp); 36 } 37 } 38 } 39 return 0; 40}

この、ファイルを参照し内容をコピーするプログラムを実行したいのですが、
コマンドライン引数を渡す事ができていません。

試したこと

過去の質問やそのほかネットで検索してみたところ、
・「プロジェクト」から設定を行う。
・コマンドプロンプトから実行する。

などの方法が見つかりましたが、自分のプロジェクトでは「(プロジェクト名)のプロパティ」
が表示されず、コマンドプロンプトは「Visual Studio コマンドプロンプト」を表示しましたが、パスのつなぎ方が分からず解決することができませんでした。

プロパティが表示されない

補足

開発環境は「Visual Studio 2017」です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hmmm

2018/04/26 14:27

肝心なところが隠れていて見えませんが、画像左のソリューションエクスプローラーの上のほうに家みたいなアイコンがあって、その右にフォルダービューとソリューションビューを切り替えるボタンがあるので押してみてください。
guest

回答3

0

こんにちは。

コマンドライン・パラメータを指定して起動する方法が判らないということでしょうか?
その場合は、「Visual Studio コマンドプロンプト」を起動後、

cd C:\Users\ユーザ名\source\repos\mathgame\Debug
mathgame パラメータ1 パラメータ2 ...[Enter]

のようにして起動すれば起動する筈です。

プロジェクトのプロパティは、恐らく何か操作方法を間違っているのだと思います。
https://theolizer.com/cpp-school1/cpp-school1-2b/#vs-screen
の2番目の画面に右クリックメニューが表示されていますが、この一番下にある「プロパティ(R)」がプロジェクトのプロパティです。

投稿2018/04/26 12:58

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

supermasuo1

2018/05/09 09:26

コマンドラインのパスの繋げ方がおかげさまでわかりました!ありがとうございました。
guest

0

ベストアンサー

こちらでテストしたら、普通に動きました。

コマンドラインからの実行ですが、、、
Windows10 ならば、スタートボタン(とは言わないか? 左下のマーク)で、"Visual Stdio 2017" - "Developer Command Prompt for VS 2017" をクリックすると、コマンドプロンプトの ウィンドウが表示されます。 ここで、"C:\users...\mathgame\Debug" へ移動します。 ( "cd c:\users...." を入力)
ここで、"mathgame <File>" と打ち込めば、<File> の内容を表示する筈です。
ただ、張り付けられている画面イメージを見る限り、Source.c がビルドか、ちょっと不安。

確実なところでは、Source.c のあるディレクトリ(フォルダ)に移動して、 "cl Source.c" と入力すると、Source.exe ができる筈なので、 "Source <File>" と打ち込んで実行するのもありです。
Visual Stdio からの実行は、プロジェクトのプロパティ画面で、「デバッグ」を選択すると、「コマンドライン引数」とか、「作業ディレクトリ」の設定があるので、適切に設定すれば、良い筈です。

あっと一つ忘れていました。
Visual Stdio上で動かす場合、"return 0" の前に、一時停止を行わないと、一瞬だけ表示されてすぐに消える問題があります。例えば、以下の行を追加してください。コピーが終わった後に、キー入力待ちとなります。

C

1getc(stdin);

あと、このコード C++ と言うより、C ですね。

投稿2018/04/26 13:32

編集2018/04/26 13:48
pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

supermasuo1

2018/05/09 09:28

コマンドプロンプトからパスをつなぎ、exeを実行して、ディレクトリを弄る事で実行できました。ありがとうございました!
guest

0

この、ファイルを参照し内容をコピーするプログラムを実行したいのですが、
コマンドライン引数を渡す事ができていません。

この部分ですが、「ビルドは出来るが、実行するとコマンドライン引数を渡しても意図した通りの処理にならない」という解釈でOKでしょうか?

C

1fopen_s(&fp, *++argv, "r"); 2 3if ((fp == NULL))

この部分に問題がある様に思えます。

fopen_s()関数は、エラー発生時に第一引数を変更しません。
(参照:https://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx)
ですので、「fp == NULL」という条件でファイルオープンの成功・失敗を判定しようとしても、上手く動きません。

C

1const errno_t result = fopen_s(&fp, *++argv, "r"); 2 3if ( result != 0 )

この様に修正すれば、上記の問題は解決できます。

投稿2018/04/26 10:31

rtr1950x

総合スコア298

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問