源代码如下:
#include <stdio.h>
#include <stdlib.h>
int c;
char *filename = "C:\\Windows" ;
int main( int argc, char *argv[] )
{
if ( argc = "/help" )
{
printf("此程序参数如下:\n");
printf("/c 提示是否确定。\n");
printf("/d 跳过警告,直接删除。\n");
printf("exit为退出。");
}
else if ( argc = "/d" )
{
remove( filename );
}
else if ( argc = "exit")
{
return 0;
}
else if ( argc = "/c" )
{
printf("是否运行该程序?(Y/N)\n");
gets(c);
if ( c == "y"|| c == "Y" )
{
remove( filename );
fprintf( stdout, "程序运行成功" );
system("pause");
return 0;
}
}
else if ( c == "n" || c == "N" )
{
fprintf(stdout,"程序没有进行任何操作。\n");
system("pause");
}
return 0;
}
原理为输入指定的参数,执行各种操作,究竟哪里错了?
int main(int argc, char * argv[])
{
.....
}
argc: 代表启动程序时,命令行参数的个数。C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参数,因此,argc的值至少是1.
argv[]:指针数组,其中的每个元素都是一个char* 类型的指针,该指针指向一个字符串,这个字符串里就存放着命令行参数。
例如,argv[0]指向的字符串就是第一个命令行参数,即可执行程序的文件名,argv[1]指向第二个命令行参数,argv[2]指向第三个命令行参数....。
#include <stdio.h>
int main( int argc, char * argv[])
{
int i;
for ( i = 0;i < argc; i++)
{
printf("%s\n",argv[i]);
}
return 0;
}
windows下,将上面的程序编译成sample.exe,然后在控制台窗口敲:
sample para1 para2 s.txt 5 "hello world"
上面有6个参数,双引号为了包含空格作为一个参数。
输出结果:
sample
para1
para2
s.txt
5
hello world
扩展资料:
main函数通常含有参数argc和argv,写法通常如下:
int main(int argc,char *argv[])
int main(int argc,char **argv)
程序:
#include<stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=0;i<argc;i++)
printf("第 %d 个参数是 %s\n",i+1,argv[i]);
return 0;
}
a.exeb.txt
执行这个命令行,程序就会统计b.txt.文件中的字母数量。
学习编程就像学数学,最重要的就是自己独立思考,像这个程序,完全可以通过研读我前面写的内容自己看出其运行机制。千万不要做一个不会思考的人。
****************************************************
假如生成的可执行文件名为a.exe,那么:
a.exeabcdefht
其中的abc和def以及ht就是传到a.exe的命令行参数,它们都是字符串,要想在程序中使用这些参数,就必须把main函数的参数列表写成如下形式:
intmain(intargc,char*argv[])
这样,argc就是参数的个数(程序路径自身也是一个参数),所以对于上面的例子而言,argc=4,argv字符指针数组中就保存了指向各个参数字符串的指针(程序路径是第一个参数,由argv[0]指向),所以对于上面的例子而言,
argv[0]="a.exe"
argv[1]="abc"
argv[2]="def"
argv[3]="ht"
一个示例,说明如何使用这些参数:
//---------------------------------------------------------------------------
#include<stdio.h>
intmain(intargc,char*argv[])
{
inti;
for(i=0;i<argc;i++){
puts(argv[i]);
}
return0;
}
//---------------------------------------------------------------------------
如果这个程序生成的可执行文件名为a.exe,并以开头的命令行执行这个程序,那么会输出:
a.exe
abc
def
ht
另外,main()函数可以有第三个参数,也是一个字符指针数组,这个数组中保存了指向保存当前系统中的环境变量字符串的指针,例如以下程序可以输出系统中定义的环境变量:
//---------------------------------------------------------------------------
#include<stdio.h>
intmain(intargc,char*argv[],char*env[])
{
inti;
for(i=0;env[i];i++){
puts(env[i]);
}
return0;
}
//---------------------------------------------------------------------------
有关程序参数的详细说明,请参考一下国外的c语言教材和linux系统编程方面的教材
比如:
#include <stdio.h>
int main(int argc, char *argv[])
{
if(argc<2)
{
printf("you must input args!");
return 0;
}
if(strcmp(argv[1],"help")==0)
{
printf("此程序参数如下:\n");
printf("-c 提示是否确定。\n");
printf("-d 跳过警告,直接删除。\n");
printf("exit为退出。");
return 0;
}
else if(strcmp(argv[1],"-c")==0)
{
//此处省略N行你的代码
}
return 0;
}
如果你编译出来的程序名字叫 test.exe 那么在命令行下输入 test.ext help后就会打印
此程序参数如下:
-c 提示是否确定。
-d 跳过警告,直接删除。
exit为退出。追问
哥们,我照你的这样写了,可是一旦执行除/help以外的参数便会停止工作。
追答/help ???你还没整明白命令行参数是怎么回事吧
你没看到我写了一行 //此处省略N行你的代码
表示后面这些要你自己写。我已经吧框架给你写出来了,总不能让我写所有的把。自己动动手
argc的意思是什么?
就是你输入了几个参数这里就是记录的几个
cmd下有个attrib 命令, attrib +s +h +a 这里参数就是3个至于参数是什么这是需要自己一个个的判断
if ( argc == "/help" )
if(*argv[1] =="/help")
还有个重点!!单个字母可以这么比较,字符串也能用这么来比较吗??
不是有个strcmp函数的么?
这参数是不能指定的!!
可变参数的!
假设你这代码生成的函数是louzhu.exe
那么你运行的时候是这么运行的,先把这个放到c:\...\system32下面
开始->运行 输入cmd,回车
louzhu /hellp
=============
看看下面的连接吧
参考资料:
char *filename = "C:\\Windows" ;
int main( int argc, char *argv[] )
{
if ( argc = "/help" )
{
printf("此程序参数如下:\n");
printf("/c 提示是否确定。\n");
printf("/d 跳过警告,直接删除。\n");
printf("exit为退出。");
}
else if ( argc = "/d" )
{
remove( filename );
}
else if ( argc = "exit")
{
return 0;
}
else if ( argc = "/c" )
{
printf("是否运行该程序?(Y/N)\n");
gets(c);
if ( c == "y"|| c == "Y" )
{
remove( filename );
fprintf( stdout, "程序运行成功" );
system("pause");
return 0;
}
}
else if ( c == "n" || c == "N" )
{
fprintf(stdout,"程序没有进行任何操作。\n");
system("pause");
}