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

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

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

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

Q&A

解決済

3回答

1129閲覧

CUIのアプリケーションのオプション処理

otaks

総合スコア223

C

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

0グッド

0クリップ

投稿2016/06/11 02:44

CUIのアプリケーションを作りたいです。
オプションの設定やチェックは、どのアプリケーションも共通の機能だと思うので、ライブラリを使用したいのですが見当たりません。

C言語用のオプションに関するライブラリは存在しないのでしょうか?
また、参考になるオープンソースのオプション処理があったら教えてください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

コマンドライン引数(オプション、スイッチ) は boost っていうライブラリの program_options というのがあります。

Cではなく、C++ですが、VC++なら普通に使えますし、

MinGW でも gcc ではなく g++ にすれば使えます。

あるいは、単純でもいいなら、

for文、while文でループしながら、チェックしていく方法。

C/C++

1// 0 を false, 1 を true と見立てて。 2int a = 0; // オプション "-a" 3int b = 0; // オプション "-b" 4int c = 0; // オプション "-c" 5char filename[261]; // オプション "-f" の後のファイル名 6int i; 7 8for( i = 0; i < argc; i++ ){ 9 if( strcmp( argv[i], "-a" ) == 0 ){ 10 a = 1; 11 }else if( strcmp( argv[i], "-b" ) == 0 ){ 12 b = 1; 13 }else if( strcmp( argv[i], "-f" ) == 0 ){ 14 strcpy( filename, argv[i+1] ); // 次の配列のデータを格納 15 } 16} 17

みたいにすれば、

main.exe -f abc.jpg -a -b

という感じでできます。

ただ、この "次のデータを格納する" 系は そのままだとエラーになる可能性があります。
( 配列は 10個しかないのに 11個目にアクセスしようとしたとかで。 )

なので、
現在位置が 最後尾でないなら ... といった定義も加える必要がありますが。

投稿2016/06/11 05:34

BeatStar

総合スコア4958

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

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

otaks

2016/06/11 23:05

書いてもらったソース、参考になりました
guest

0

標準的なものであれば getopt があります。
参考
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/getopt.3.html

投稿2016/06/11 02:50

yoshi777

総合スコア674

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

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

otaks

2016/06/11 23:11

POSIX標準なのですね。 環境を書いてなくて申し訳ないですが、Windows, Linux共用で探していました。 検索してみるとWindows用だとオープンソースで公開している人はちらほらいるようでした。
guest

0

C言語ならばメイン関数の引数としてオプション(コマンドライン引数)を受け取れますよ。
int main(int argc, char* argv[])

argc:オプションの数
argv[i]:i版目のオプション

ちなみにargv[0]には実行ファイル名が入ります。

投稿2016/06/11 06:02

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問