私は次のopen.c
いずれかを行う非常に単純なCプログラム呼び出しを作成しています。
1)ファイルテキストが配列に格納されるディレクトリ内のファイルを一覧表示します
私はこれまでこのコードを持っていますが、機能していないようです。
{}
コマンドライン引数をおよび とargv
比較するには、を使用する必要があります。"-ah"
"-ad"
#include <string.h>
if (argc > 2)
{
if (strcmp (argv[1], "-ah") == 0)
{
/* List hidden files */
}
else if (strcmp (argv[1], "-ad") == 0)
{
/* List files */
}
else
{
/* Unknown command-line argument */
}
}
else
{
/* No command-line arguments */
}
参考文献:
C11 (n1570)、§ 5.1.2.2.1 プログラムの起動
それらが宣言されている場合、
main
関数のパラメーターは次の制約に従う必要があります。— の値は
argc
非負でなければなりません。—
argv[argc]
ヌルポインタでなければなりません。— argc の値が 0 より大きい場合、配列メンバー
argv[0]
からargv[argc-1]
inclusive までには、プログラムの起動前にホスト環境によって実装定義の値が与えられる文字列へのポインターが含まれます。その目的は、ホスト環境の他の場所からプログラムを開始する前に決定された情報をプログラムに提供することです。ホスト環境が大文字と小文字の両方の文字を含む文字列を提供できない場合、実装は文字列が小文字で受け取られるようにする必要があります。— argc の値が 0 より大きい場合、 が指す文字列
argv[0]
はプログラム名を表します。argv[0][0]
プログラム名がホスト環境から利用できない場合、ヌル文字になります。argc の値が 1 より大きい場合、 ~ が指す文字列はプログラム パラメータargv[1]
を 表します。argv[argc-1]
それ以外の
if (-ad)
次のようなものを書く必要があります
if (strcmp(argv[1],"-ad")==0)
同じif (-ah)
コマンドライン引数を読み取ろうとしている方法が間違っています
与えられた
int main(int argc, const char * argv[])
プログラムの最初の引数 (例: "-ad") は に格納されargv[1]
ます。プログラムが何をすることが期待されているかを知るには、その文字列を分析する必要があります。
argc と argv の基本的な紹介を次に示します。実際のプログラムでも、ある程度の保護が必要です。たとえば、プログラムは、argc をチェックして、実際にパラメーターを指定して呼び出されたかどうかをチェックする必要があります。
if (argc < 2) {
printf("What do you want me to do?\n");
return 3;
}
または、少なくとも 1 回はコマンド ライン引数を手動で処理して動作させるようにしてください。コマンド ライン処理全体をgetoptに委譲することもできます。