我的教授在课堂上引用了这个例子。它基本上是Unix more
命令的一个版本,我不确定它中的几个东西
int main( int ac , char *av[] )
{
FILE *fp;
if ( ac == 1 )
do_more( stdin );
else
while ( --ac )
if ( (fp = fopen( *++av , "r" )) != NULL )
{
do_more( fp ) ;
fclose( fp );
}
else
exit(1);
return 0;
}
我知道*fp
定义了一个文件指针,而* av []是命令行参数的数组。但*++av
在操作方面意味着什么?
答案 0 :(得分:8)
阅读* ++ av像这样:
++av // increment the pointer
*av // get the value at the pointer, which will be a char*
在此示例中,它将打开命令行上传递的每个文件。
也:
av[0] // program name
av[1] // parameter 1
av[2] // parameter 2
av[3] // parameter 3
av[ac - 1] // last parameter
答案 1 :(得分:2)
这是一个更好的代码版本,应该做同样的事情。希望它更容易理解。名称argc
和argv
是事实上的标准,您应该使用它们来使其他程序员更容易理解代码。
int main (int argc, char *argv[])
{
FILE *fp;
int i;
if ( argc == 1 )
{
do_more( stdin );
}
else
{
for(i=1; i<argc; i++) /* skip the name of the executable, start at 1 */
{
fp = fopen (argv[i], "r");
if(fp == NULL)
{
/* error message, return etc here */
}
do_more( fp ) ;
fclose( fp );
}
}
return 0;
}