main() 的参数问题
经常看到
main(argc, argv[]){
if (argc!=4)..
if (argv[1]!=...) ...
if (argv[2]!=...) ...
if (argv[3]!=...) ...
if (argv[4]!=...) ...
}
我想知道到底这些参数是怎么传给上述参数的
还有经常看到建议程序要分成几个文件写,是怎么样分呢`能不能给详细解释下
[解决办法]
int n=atoi(argv[1]);
如果,你在命令行下输入 test.exe 23 ....
这句话的意思就是 把 "23 " 转换成 数字 23
argv[0] 为 "test.exe "
argv[1] 为 "23 "
.....
argc 为 空格格开的字符串的个数
[解决办法]
参数是在你在cmd窗口或.bat文件中传给.exe程序的。其中参数个数者各变量有操作系统传,剩下的那个数组指针参数要你自己传给程序。
你把不同功能的函数写到不同的模块中,就的到了不同的文件
[解决办法]
每个应用程序后面都可以跟一些参数来控制程序初始化的状态.
看以下程序
程序代码
#include <stdio.h>
void main(int argc, char *argv[])
{
int i;
for(i = 0; i < argc; i++)
printf( "%s%s ", argv[i], (i < argc - 1) ? " " : " ");
printf( "\n ");
}
这个简单的程序什么都不干,只是将接收到的函数参数原原本本的打印出来,让我们看清楚我们的参数是如何被应用程序调用的.
int argc代表整形的传入的参数个数
char *argv[]代表指向传入的字符型参数地址的指针变量,通过访问这些指针,我们能得到传入的是什么
让我们输入一些参数来测试吧
切忌在命令行下进行操作,不然怎么加参数呢
什么?命令行是什么?
Windows NT/XP及以上用户运行cmd
Windows 98/Me及以下用户运行command(用这些操作系统的可以列为国家保护动物了)
命令行下直接输入程序名:我这里叫test(.exe)
程序返回的确实是所在磁盘路径D:\TURBOC2\WORKING\TEST.EXE
输入test 123
返回D:\TURBOC2\WORKING\TEST.EXE 123
至于分文件,因为一个程序所有代码不可能全部写在一个文件中,所以不用模块,不同函数可以写在不同文件里面,知道引用头文件就可以引用该文件的定义.
[解决办法]
我想知道到底这些参数是怎么传给上述参数的
------------------------------------------
1楼说的很明了了,
dos下,输入要运行的程序名,再输入参数:
program pram1 pram2...
argc 为 参数个数+1
argv[0] 为 "program "
argv[1] 为 "pram1 "
argv[1] 为 "pram2 "
...
[解决办法]
main的参数由命令行传入,比如
你的exe叫, a.exe
当你用双击的方式运行的时候,main只接受到一个参数
这个时候
argc = 1
argv[0] = 你的exe文件路径,比如:C:\a.exe
但你在命令提示符窗口运行你的exe,
也可以在开始->运行-> c:\a.exe a b
这个时候
agrc = 3
argv[0] 同上
argv[1] = a
argv[2] = b
[解决办法]
每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
1. main() 参数
在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
* argc: 整数,为传给main()的命令行参数个数。
* argv: 字符串数组。
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
对DOS 3.0 以下的版本,argv[0]为空串( " ") 。
argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;
argv[2] 为执行程序名后的第二个字符串;
...
argv[argc]为NULL。 *env: 字符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。
TurboC2.0启动时总是把这三个参数传递给main()函数,可以在用户程序中说明(或不说明)它们,如果说明了部分(或全部)参数,它们就成为main()子程序的局部变量。 请注意:一旦想说明这些参数,则必须按argc,argv, env的顺序,如以下的例子:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二种情况也是合法的,但不常见,因为在程序中很少有只用argc,而不用argv[]的情况。
以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数:
/*program name EXAMPLE.EXE*/
#include
#include <stdio.h>
main(int argc,char *argv[],char *env[])
{
int i;
printf( "These are the %d command-line arguments passed to \main:\n\n ", argc);
for(i=0; i <=argc; i++)
printf( "argv[%d]:%s\n ", i, argv[i]);
printf( "\nThe environment string(s)on this system are: \\n\n ");
for(i=0; env[i]!=NULL; i++)
printf( " env[%d]:%s\n ", i, env[i]);
}
如果在DOS 提示符下,按以下方式运行:
EXAMPLE.EXE: C:\example first_argument "argument with blanks " 3 4 "last butone " stop!
注意:可以用双引号括起内含空格的参数,如本例中的: "argument with blanks "和 "Last but one ")。
应该提醒的是:传送main() 函数的命令行参数的最大长度为128个字符 (包括参数间的空格),这是由DOS 限制的。