3

私はCに不慣れで、Cプログラムの実行と入力の提供を同時に行うことについて質問したいと思います。

私がやりたいのは、プログラム(fileOpenerなど)を実行し、開くファイルを指定することです。

./fileOpener < filename1

すでに試しましたが、正常に動作しますが、filename1が何であるかを知るために何を使用しますか?そうすれば、次のファイルを開くことができます

fp = fopen(filename1, "r")

ありがとう。

編集:わかりました、もう少し説明しようと思います。「<」がない場合は、以前と同じようにコマンドライン引数を使用できますが、<を使用して試したところ、機能しませんでした。

具体的には:fileOpenerコード:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
printf("%s", argv[1]);
}

./fileOpener < filename1私が出力を使用するときは./fileOpener

gcc -o fileOpener fileOpener.cコンパイラとして使用しました

4

4 に答える 4

4
int main(int argc, char *argv[])

好きな名前を付けることができますが、これらは通常の名前です。

argc負ではありません。の有用な要素の数を示しargvます。

argcが正の場合argv[0]、プログラム名が含まれます。次に、プログラムのコマンドライン引数を含む文字配列argv[1]をポイントします。argv[argc - 1]

たとえば、コマンドラインで次のようなプログラムを実行した場合

unzip filename.zip

argc2に等しくなります。とargv[0]同等に比較され"unzip"ます; とargv[1]同等に比較され"filename.zip"ます。

ソース

于 2012-10-21T22:05:50.803 に答える
2

リダイレクト(つまり「<filename」)を使用する場合、ファイルはシステムによって開かれます。名前を見つけることはできますが、ファイルがすでに開いているため、移植性がなく、とにかく役に立たないです。stdinの代わりに使用するだけで、 (または)fpを使用する必要はありません。fopen()fclose()

int main()
{
   char buffer[1024];

   // fgets() reads at most 1024 characters unless it hits a newline first
   // STDIN has been already opened by the system, and assigned to data flowing
   // in from our file ( < inputFile ).
   fgets(buffer, 1024, stdin);

   printf("The first line of input was: %s", buffer);
}

別のアプローチは、引数を使用することです。

int main(int argc, char **argv)
{
   FILE *fp = NULL;
   char buffer[1024];

   if (argc != 2)
   {
       fprintf(stderr, "You need to specify one argument, and only one\n");
       fprintf(stderr, "Example: %s filename\n", argv[0]);
       // Except that argv[0], this program's name, counts.
       // So 1 argument in command line means argc = 2.
       return -1;
   }
   printf("I am %s. You wanted to open %s\n", argv[0], argv[1]);

   fp = fopen(argv[1], "r");

   fgets(buffer, 1024, stdin);

   printf("The first line of input was: %s", buffer);

   fclose(fp); fp = NULL; // paranoid check

   return 0;
}
于 2012-10-21T22:10:51.977 に答える
1

コマンドライン引数を取るようにプログラムを設定する必要があります。これがあなたの正確な質問を解決する良いチュートリアルです:

http://www.cprogramming.com/tutorial/c/lesson14.html

于 2012-10-21T22:04:48.130 に答える
0

Cのプログラムのmain関数には、次の2つの引数があります。

int main(int nArgs, char *pszArgs[]) {}

その最初の引数は、実行時にプログラムに渡されたパラメーターの数をプログラムに通知します。通常、これにはプログラム名が含まれているため、1になります。

2番目の引数は文字列のテーブルであり、このようにアクセスできます(以下のプログラムは与えられたパラメーターを出力します)。

int main(int nArgs, char *pszArgs[])
{
   int i = 0;
   while (i < nArgs)
   {
      printf("param %d: %s\n", i, pszArgs[i]);
      i++;
   }
   return 0;
}
于 2012-10-21T22:11:05.730 に答える