我是C的新手,我想询问有关运行C程序并同时提供输入的信息。
我想要做的是运行程序(例如fileOpener)并说明要打开的文件
./fileOpener < filename1
我已经尝试过它并且工作正常,但是我用什么来知道filename1是什么?这样我就可以用
打开文件fp = fopen(filename1, "r")
感谢。
编辑:好的,我会尝试解释一下。如果没有“&lt;”然后我可以像以前一样使用命令行参数,但是当我用&lt;来尝试它时,它不起作用
具体来说: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
作为编译器
答案 0 :(得分:4)
int main(int argc, char *argv[])
您可以随意命名,但这些是正常名称。
argc
是非负面的。它给出了argv
中有用元素的数量。
如果argc为正数,argv[0]
包含程序名称。然后argv[1]
到argv[argc - 1]
指向包含程序命令行参数的字符数组。
例如,如果我在命令行运行程序,例如
unzip filename.zip
argc
等于2;和argv[0]
将等于"unzip"
;和argv[1]
的比较等于"filename.zip"
。
答案 1 :(得分:2)
如果您使用重定向(即&#34;&lt; filename&#34;),则无法执行此操作,系统会打开该文件。您可以发现该名称,但它不可移植,并且因为该文件已经打开,所以无论如何都是无用的。只需使用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;
}
答案 2 :(得分:1)
您需要设置程序以获取命令行参数。这是一个很好的教程,可以解决您的确切问题:
答案 3 :(得分:0)
C中程序的main
函数有两个参数:
int main(int nArgs, char *pszArgs[]) {}
第一个参数告诉程序在运行程序时传递了多少参数。通常,这只是1,因为它包含程序的名称。
第二个参数是一个字符串表,可以访问它(下面的程序打印给它的参数):
int main(int nArgs, char *pszArgs[])
{
int i = 0;
while (i < nArgs)
{
printf("param %d: %s\n", i, pszArgs[i]);
i++;
}
return 0;
}