获取分隔的文件名 c - linux

Get file names separated c - linux

在 C-linux 中 - 如何输入由 space 分隔的未知数量的文件名并将每个文件名分别保存为字符串? 和另一个问题 - 一位朋友告诉我 "args" 作为一些未知数量问题的解决方案。所以我的问题是 - "args" 他在说什么??

非常感谢!

您的程序将(或应该)具有这样的 main 函数:

int
main (int argc, char **argv)
{
   ...
}

argc 告诉您程序传递了多少个参数,argv 是它们的数组。 IE 参数在 argv[0] ... argv[argc-1].

注意 argv[0] 实际上是程序的名称,而不是 argv[1].

中提供的第一个附加参数

在 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 调用的,那么可以很安全地假设。