0. 使用你的命令提示字元
在进入正题的时候,这里教你如何使用命令提示字元 (应该说如何会用命令列)。请您先按下开始->执行-> cmd.exe 按下 Enter。
好了后按下 "dir.exe /?",你会看到会有一堆参数跑出来,虽平常都说 "dir 这个指令是用来查目录、档案",但实际上dir 它是一个小的应用程序,副档名是 .exe,只是在命令提示字元里面我可以给它「外部参数」,比如说我键入
dir.exe C:\
它便会帮我找出 C:\ 底下所有档案、资料夹,我再键入
dir.exe C:\ /b
它也会帮我找出 C:\ 底下所有资料夹与档案,只是这次是简单模式的输出。这里就可以开始说一点点 argc, argv 了。
第一次我键入 dir.exe C:\ ,总共有二个单字,所以 argc = 2;第一个字是 "dir.exe",所以 argv[0] = "dir.exe",第二个字是 "C:\",所以 argv[1] = "C:\\"。
第二次我键入 dir.exe C:\ /b,一样的道理,argc = 3,argv[0]="dir.exe",argv[1] = "C:\\",argv[2] = "/b"。
1. main 函式传回值
「现今」的 main 函式传回值一律都是 int ,这也是您常看到 int main() 或是 int main(void);在早期,main 是可以用 void main() 方式,而现在部份 compiler 实做,即使你写
main()
{
// dothing
}
很不建议这种写法,实际上它是把它看成
int main()
{
// do thing
return 0;
}
2. main 函式引数列
在上面有提到传回值是 int ,而上面的例子引数列都是 void ,事实上目前比较通用、能接用的是二种写法,
int main()
int main(int argc, char *argv[])
第二种写法就是您要问的 argv,回到第 0 点所提到的,这种程序事实上就是要在命令提示字元底下下参数才会用到 argc, argv,你直接快点二下或是用 IDE 直接 compile - run,是看不出什么结果的。
3. 范例 1 更多: http://www.51240.com
这里先举一个简单的程序码,我要写的程序是,你于命令列输入了什么,我就把它输出出来。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i=0;
printf("共 %d 个参数\n", argc);
for(i=0; i<argc; ++i){
printf("第 %d 个参数:%s\n", i+1, argv[i]);
}
// system("pause"); // 用命令字元的话就不要再暂停
return 0;
}
接下来就是重点了,怎么去测试这个程序?假设我生成是 Test.exe,为方便说明,先把它复制到 C:\ 底下。
开启你的命令提示字元,输入
"C:\Test.exe" Param1 Param2 Param3
你会发现结果是
共 4 个参数
第 1 个参数: "C:\Test.exe"
第 2 个参数: Param1
第 3 个参数: Param2
第 4 个参数: Param3
由上叙述可知,任何程序的 argc 必大于等于1,而且 argv[0] 就是程序名字本身。
4. 范例 2
现在假设要写的这个程序是,输入 sum.exe 1 2 3 4 56 7 ,后面跟一大堆数字,最后会把这些数字加总后再显示出来,于是我们便可这么做
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i=0, sum=0;
for(i=1; i<argc; ++i) // 注意,我们要的数字是从 argv[1] 开始
{
sum += atoi(argv[i]);
// 由于 argv[i] 是字串,但我们要算的是"数字" 的总合,
// 所以用 atoi 将 argv[i] 这字串转成数字再加总
}
printf("Sum=%d\n", sum); // 最后再输出总合
return 0;
}
在进入正题的时候,这里教你如何使用命令提示字元 (应该说如何会用命令列)。请您先按下开始->执行-> cmd.exe 按下 Enter。
好了后按下 "dir.exe /?",你会看到会有一堆参数跑出来,虽平常都说 "dir 这个指令是用来查目录、档案",但实际上dir 它是一个小的应用程序,副档名是 .exe,只是在命令提示字元里面我可以给它「外部参数」,比如说我键入
dir.exe C:\
它便会帮我找出 C:\ 底下所有档案、资料夹,我再键入
dir.exe C:\ /b
它也会帮我找出 C:\ 底下所有资料夹与档案,只是这次是简单模式的输出。这里就可以开始说一点点 argc, argv 了。
第一次我键入 dir.exe C:\ ,总共有二个单字,所以 argc = 2;第一个字是 "dir.exe",所以 argv[0] = "dir.exe",第二个字是 "C:\",所以 argv[1] = "C:\\"。
第二次我键入 dir.exe C:\ /b,一样的道理,argc = 3,argv[0]="dir.exe",argv[1] = "C:\\",argv[2] = "/b"。
1. main 函式传回值
「现今」的 main 函式传回值一律都是 int ,这也是您常看到 int main() 或是 int main(void);在早期,main 是可以用 void main() 方式,而现在部份 compiler 实做,即使你写
main()
{
// dothing
}
很不建议这种写法,实际上它是把它看成
int main()
{
// do thing
return 0;
}
2. main 函式引数列
在上面有提到传回值是 int ,而上面的例子引数列都是 void ,事实上目前比较通用、能接用的是二种写法,
int main()
int main(int argc, char *argv[])
第二种写法就是您要问的 argv,回到第 0 点所提到的,这种程序事实上就是要在命令提示字元底下下参数才会用到 argc, argv,你直接快点二下或是用 IDE 直接 compile - run,是看不出什么结果的。
3. 范例 1 更多: http://www.51240.com
这里先举一个简单的程序码,我要写的程序是,你于命令列输入了什么,我就把它输出出来。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i=0;
printf("共 %d 个参数\n", argc);
for(i=0; i<argc; ++i){
printf("第 %d 个参数:%s\n", i+1, argv[i]);
}
// system("pause"); // 用命令字元的话就不要再暂停
return 0;
}
接下来就是重点了,怎么去测试这个程序?假设我生成是 Test.exe,为方便说明,先把它复制到 C:\ 底下。
开启你的命令提示字元,输入
"C:\Test.exe" Param1 Param2 Param3
你会发现结果是
共 4 个参数
第 1 个参数: "C:\Test.exe"
第 2 个参数: Param1
第 3 个参数: Param2
第 4 个参数: Param3
由上叙述可知,任何程序的 argc 必大于等于1,而且 argv[0] 就是程序名字本身。
4. 范例 2
现在假设要写的这个程序是,输入 sum.exe 1 2 3 4 56 7 ,后面跟一大堆数字,最后会把这些数字加总后再显示出来,于是我们便可这么做
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i=0, sum=0;
for(i=1; i<argc; ++i) // 注意,我们要的数字是从 argv[1] 开始
{
sum += atoi(argv[i]);
// 由于 argv[i] 是字串,但我们要算的是"数字" 的总合,
// 所以用 atoi 将 argv[i] 这字串转成数字再加总
}
printf("Sum=%d\n", sum); // 最后再输出总合
return 0;
}