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

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

新規登録して質問してみよう
ただいま回答率
86.02%
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

受付中

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

hama_daip
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)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

1回答

0グッド

0クリップ

396閲覧

投稿2022/11/28 03:23

前提

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

実現したいこと

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

発生している問題

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

該当のソースコード

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

試したこと

strcmpでの判定

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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 使うのが妥当かと。

回答1

0

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

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

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

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

投稿2022/11/28 04:34

編集2022/11/28 04:47
int32_t

総合スコア17265

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。