命令行参数
命令行参数
在 C 语言中,可以接受命令行参数。命令行参数是在命令行操作系统(如 DOS 或 Linux)中程序名称之后给出的,并由操作系统传递给程序。要在你的程序中使用命令行参数,你必须首先理解 main 函数的完整声明,该函数之前不接受任何参数。实际上,main 实际上可以接受两个参数:一个是命令行参数的数量,另一个是所有命令行参数的完整列表。
main 的完整声明如下:
int main ( int argc, char *argv[] )整数 argc 是参数计数。它是从命令行传递给程序的参数数量,包括程序名称。
字符指针数组是所有参数的列表。argv[0] 是程序名称,如果名称不可用则为空字符串。之后,小于 argc 的每个元素号都是一个命令行参数。你可以像使用字符串一样使用每个 argv 元素,或者将 argv 作为二维数组使用。argv[argc] 是一个空指针。
这如何使用?几乎任何希望在执行时设置其参数的程序都会使用这种方式。一个常见的用法是编写一个函数,该函数接受一个文件名,并将整个文件内容输出到屏幕上。
#include <stdio.h>
int main ( int argc, char *argv[] )
{
if ( argc != 2 ) /* 为了正确执行,Argc应该是2 */
{
/* 我们输出argv[0],它是程序名 */
printf( "usage: %s filename", argv[0] );
}
else
{
// 我们假设argv[1]是要打开的文件名
FILE *file = fopen( argv[1], "r" );
/* 失败时,fopen返回0,即NULL指针 */
if ( file == 0 )
{
printf( "Could not open file\n" );
}
else
{
int x;
/* 每次从文件中读取一个字符,在EOF处停止,EOF表示文件的结束。
请注意,下面使用的“赋值给变量,检查值”的习惯用法是有效的,
因为赋值语句的计算结果是赋值。 */
while ( ( x = fgetc( file ) ) != EOF )
{
printf( "%c", x );
}
fclose( file );
}
}
}这个程序相当短,但它包含了完整的 main 函数版本,并且能执行一个有用功能。它首先检查用户是否添加了第二个参数,理论上是一个文件名。然后程序尝试打开文件来检查其有效性。这是一个标准操作,如果成功打开文件,fopen 的返回值将是一个有效的 FILE*;否则,它将是 0,即 NULL 指针。之后,我们只需执行一个循环,逐个字符地从文件中打印出来。代码本身很清晰,但夹杂着大量注释;在这个教程的现阶段,你应该没有困难理解它的操作。😃
