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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コマンドライン

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

Q&A

1回答

1004閲覧

C言語でのfindコマンドの作成

hama_daip

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コマンドライン

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

0グッド

0クリップ

投稿2022/11/28 03:23

前提

CでWindowsで用意されているfindコマンドを作成したいと思っています

実現したいこと

・コマンドライン引数を使い、実行ファイル名 "検索文字列"対象ファイル名とした時にダブルクォーテーションで囲われているか判定をしたい
・argcが3→オプションなし書式でのチェック
・argcが4→オプションあり書式でのチェック
・上記以外はエラー

発生している問題

ダブルクォーテーションに囲われているかの判定が出来ない

該当のソースコード

if(argc == 3 && strchr(argv[], '"')){ }

試したこと

strcmpでの判定

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

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

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

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

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

jimbe

2022/11/28 04:25

『ダブルクォーテーションに囲われている』時、argv にどのように入っているかを理解しているでしょうか、
Zuishin

2022/11/28 06:25

ダブルクォーテーションはシェル(cmd, PowerShell)によって解析され、そのコマンドには囲まれたものが一つの引数として渡されているので気にする必要はありません。
dodox86

2022/11/28 06:31

コマンドラインのオプションをパーズするとき、動作の詳細を指定するオプションはWindowsのコマンドプロンプト(cmd.exe)などでは伝統的に /V や /C など、頭にスラッシュ'/'が付いているか否かで判定します。UN*X系、gnuのコマンド等では '-'や '--'です。あとはコマンドによってオプションの並び、順番に依存します。既にいただいたコメントや回答も踏まえ、findコマンドの詳細を確認し、検討しましょう。 C>help find ファイル (複数可) 内のテキスト文字列を検索します。 FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "文字列" [[ドライブ:][パス]ファイル名[...]] /V 指定した文字列を含まない行をすべて表示します。 /C 指定した文字列を含む行の数だけを表示します。 /N 行番号を表示します。 /I 大文字と小文字の区別をしないで検索します。 /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。 "文字列" 検索する文字列を指定します。 [ドライブ:][パス]ファイル名 検索するファイル (複数可) を指定します。 パスが指定されていないときは、プロンプトで入力されたテキストまた は別のコマンドからパイプ処理で渡されたテキストを検索します。 C>
dodox86

2022/11/28 23:18

知恵袋でも複数の回答をいただいているから、以降はスルー。
jimbe

2022/11/29 04:25

まぁ、 getopt 使うのが妥当かと。
guest

回答1

0

ダブルクォーテーションで囲われているか判定をしたい

簡単な方法ではできません。C のコマンドライン引数の解析の例にあるように、外側の二重引用符は argv に入らず、二重引用符の有無で挙動を分けることはできません。

何か別の方法で目的を達成したほうがよいでしょう。
(質問文には説明のない「オプション」というものが使われていて、どのような方針にすべきかは助言できません)

どうしても二重引用符の有無をチェックしたい場合は GetCommandLine() API でコマンドライン文字列を得て自力で引数の解析をする必要があります。

投稿2022/11/28 04:34

編集2022/11/28 04:47
int32_t

総合スコア20884

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問