在C-linux中 - 如何获取由空格分隔的未知数量的文件名的输入,并将每个文件名分别保存为字符串? 另一个问题 - 一位朋友告诉我“args”是解决某些问题的解决方案。所以我的问题是 - 他谈到的这个“args”是什么?
非常感谢!
答案 0 :(得分:0)
您的程序将(或应该)具有main
函数,如下所示:
int
main (int argc, char **argv)
{
...
}
argc
告诉你程序传递了多少个参数,argv
是它们的数组。 IE的参数位于argv[0]
... argv[argc-1]
。
请注意argv[0]
实际上是程序的名称,而不是argv[1]
中的第一个附加提供的参数。
答案 1 :(得分:0)
在c中main()
函数可以有两个参数,第一个是参数个数,第二个是带参数的数组,所以你不需要将每个字符串存储在生命周期中可以使用这个数组的任何地方该计划。
以下是您将这些参数打印到标准输出
的示例int main(int argc, char **argv)
{
int index;
for (index = 1 ; index < argc ; ++index)
printf("Argument %d -> %s\n", index, argv[index]);
return 0;
}
如您所见,参数的数量为argc
,如果从shell调用程序的第一个参数将是程序名称,下一个参数是传递给程序的参数。
假设你遵守了这样的程序
gcc -Wall -Wextra -Werror -O0 -g3 source.c -o program
然后你可以用这种方式调用程序
./program FileName1 "A file name with spaces embeded" another_file
输出将是
Argument 1 -> FileName1
Argument 2 -> A file name with spaces embeded
Argument 3 -> another_file
通常argv[0]
是程序名称,但是如果程序是从shell中调用的,那么你可以保证,假设它是非常安全的。