为了账号安全,请及时绑定邮箱和手机立即绑定

请问该如何在程序内向main函数的第二个参数传实参?

请问该如何在程序内向main函数的第二个参数传实参?

阿波罗的战车 2019-07-01 03:03:35
如何在程序内向main函数的第二个参数传实参
查看完整描述

4 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

例如,你编译连接后得到可执行文件名为main.exe
它的源文件如下:
#include "stdafx.h"

int main(int argc, char* argv[])
{
for (int i=0;i<argc;i++)
printf("%s\n",argv[i]);
return 0;
}

运行的时候可以这样:
在开始->运行中输入cmd,启动命令行,进入到main.exe所在的目录,这时用dir命令可以看到这个文件.如果看不到,则说明当前目录还不是可执行文件所在的目录,需要更改,用命令cd进行切换.或者设置一下环境变量.
然后,输入,main.exe this is a test for main.
如果成功的话,就会输出.
main
this
is
a
test
for
main
至于,你要将实参传给main,可以这样实现.
另外写一个控制台程序,传实参以调用刚才的可执行文件.如:
#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
WinExec("main this is a test for main",SW_SHOWNORMAL);
return 0;
}
如上所示,这个程序就是调用main.exe,并传一个字符串给它,this is a test for main.

命令行中直接输入相应的可执行文件就行了,不需要再传实参了.
如果在C#中,就要参考一下Process这个类了.

查看完整回答
反对 回复 2019-07-14
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

不能这样用,main函数的原型是
int main(int argc,char *argv[]);

这里
argc是参数个数.
argv[]是参数的具体内容
main里面的这两个参数的作用是从命令行获得

举个例子,你的生成EXE文件在目录 f:\test\debug\,文件名叫 test.exe
那么,你在计算机中,“运行” - “cmd”,在弹出来的黑窗口里,输入
F:(回车)
cd test\debug

然后执行
test.exe param1 param2

(上面输入了两个参数)
则你的这个test.exe程序的main函数main(int argc,char *argv[])中
argc=3; // 三个参数,第一个是程序名,后面二个是自己输入的其它参数
argv[0]="test.exe";
argv[1]="param1";
argv[2]="param2";

你可以试着把 printf("%s",*(aa+1))改为printf("%s",*aa);这样就是输出第一个参数,即你的程序名(在你直接用IDE调试时,是直接包含了路径的,因为没有切换目录的过程。)你输出第二个是不存在的参数。

你把那两个变量放在外面是全局变量,不是局部变量,main只要用无参数的那个就行了。当你把main的形参中的参数命名成与那个全局变量相同时,起作用的是这个局部变量,而main接收的是外部的输入。
根据你的需要,实际上程序应该是这样的
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

char *p="132";
char **a=&p;
int main()
{
char **aa=a;
printf("%s\n",*aa ); // 想输出132,不应该是 *(aa+1)
return 0;
}



查看完整回答
反对 回复 2019-07-14
?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

1、main函数可以不带参数,也可以带参数,这个参数可以认为是 main函数形式参数
C语言规定main函数的参数只能有两个,还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:
int main (int argc,char *argv[])
2、由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。实际上,main函数的参数值是从操作系统命令行上获得的。当要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。
DOS提示符下命令行的一般形式为:
C:\>可执行文件名 参数 参数……;

查看完整回答
反对 回复 2019-07-14
?
炎炎设计

TA贡献1808条经验 获得超4个赞

main函数可以不带参数,也可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为:
main (argc,argv)
C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:
main (int argc,char *argv[])
由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。
DOS提示符下命令行的一般形式为:
C:\>可执行文件名 参数 参数……;
但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。
例如有命令行为:
C:\>E24 BASIC foxpro FORTRAN
由于文件名E24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。 指针数组的长度即为参数个数。数组元素初值由系统自动赋予。其表示如图所示:

【例】
main(int argc,char *argv){
while(argc-->1)
printf("%s",*++argv);
}
本例是显示命令行中输入的参数。如果上例的可执行文件名为e24.exe,存放在A驱动器的盘内。因此输入的命令行为:
C:\>a:e24 BASIC foxpro FORTRAN
则运行结果为:
BASIC
foxpro
FORTRAN
该行共有4个参数,执行main时,argc的初值即为4。argv的4个元素分为4个字符串的首地址。执行while语句,每循环一次argv值减1,当argv等于1时停止循环,共循环三次,因此共可输出三个参数。在printf函数中,由于打印项*++argv是先加1再打印, 故第一次打印的是argv[1]所指的字符串BASIC。第二、三次循环分别打印后二个字符串。而参数e24是文件名,不必输出。



查看完整回答
反对 回复 2019-07-14
  • 4 回答
  • 0 关注
  • 786 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信