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

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

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

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

Q&A

解決済

5回答

231閲覧

c++で受け取りたいのに受け取れてない引数がある

tomato1278

総合スコア13

C++

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

0グッド

0クリップ

投稿2018/06/14 06:14

編集2018/06/15 06:32

##分からないこと
int main(int argc, char *argv[])
を使って引数を受け取っているのですが、「%」や「"」が(他にもあるかも...)受け取れません。
最終的には「!」から「」(ASCIIコードで言う「33126(10進数)」)を受け取りたいのですが可能ですか?

補足?:Windows10で「%」のみの記載でアウトになります。

補足2:「""」で囲って渡すことに成功したのですが(%は%%と置いて入力するなど...)、私としてはコマンドではなくc++の方で制御(%を%%に一々しなくてよく)したいのですが不可能でしょうか...

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

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

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

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

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

guest

回答5

0

OSによるというか、シェルによるというか。

プログラム的に受け取れない文字は'\0'以外はないですが、その文字をコマンドラインでどう書くかは、その環境(シェルの種類とか)に依ります。

また、Windows環境だと、Windowsのシェル(CMD.EXE)の機能不足のためにC++のランタイムが追加のコマンドライン解釈処理をしていることがあります。

投稿2018/06/14 06:22

otn

総合スコア84559

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

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

otn

2018/06/14 07:06

> 補足?:Windows10で「%」のみの記載でアウトになります。 ^% と、^を前置してみてください。< > | & 等も同じく ^を前置。 バッチファイルの中で % を書きたいときは %% と重ねます(これはバッチファイルの初歩知識)。 > C++のランタイムが追加のコマンドライン解釈 これを回避するためには、GetCommandLineA(W) を使います。 https://teratail.com/questions/74973 にサンプル有り。
tomato1278

2018/06/15 06:34

試してみます。 ありがとうございます。
guest

0

ベストアンサー

こんにちは。

コマンドラインは、結構色々な機能を持っています。メジャーなものでは、*.cpp等のワイルドカードや、空白を含むパスを許すために"C:\Program Files\foo\bar.exe"などです。
これらの*"など(他にも多数あります)を渡すには「エスケープ」するなど特殊処理が必要です。
cmd.exe のコマンドラインの仕様を解析してみたが参考になりそうです。

投稿2018/06/14 07:34

Chironian

総合スコア23272

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

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

tomato1278

2018/06/15 06:36

コマンドラインではやはり綺麗に行かないものですね... ご意見ありがとうございます。 頑張ってみます。
guest

0

ちょっと強引ですが、文字コード変換して受け渡しするのは?


'%' ⇒ "0x0025" ⇒ *argv ⇒ 数値に変換 ⇒ charに代入 ⇒ '%'
'\0' ⇒ "0x0000" ⇒ *argv ⇒ 数値に変換 ⇒ charに代入 ⇒ '\0'

投稿2018/06/14 06:47

Vitch-N-Hodh

総合スコア22

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

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

tomato1278

2018/06/15 06:35

検討してみます。 ありがとうございます。
guest

0

引数をクオートで囲っていない、だけではないでしょうか。

投稿2018/06/14 06:34

kazto

総合スコア7196

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

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

tomato1278

2018/06/15 06:33

クォートで半ば解決出来ました。 ありがとうございます。 最終手段としたいです。
guest

0

コマンドラインの展開の”仕様”ですね
main の引数では無理なので、Windowsであれば、GetCommandLine関数なのでコマンドラインを取得するテですね

投稿2018/06/14 06:26

y_waiwai

総合スコア87774

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

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

tomato1278

2018/06/15 06:33

少し、調べて試したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問