24小时热门版块排行榜    

查看: 1859  |  回复: 29
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

as23p

木虫 (小有名气)

[求助] 关于 argc 的值

刚接触C语言没多久,之前一直用Fortran,所以有个地方不太明白,希望大家赐教:
在C里经常用到诸如 int main(int argc, int *argv[]) 的语句,我的问题是参量argc的值是如何获得的呢?在Fortran里,所有的函数参量都是在调用该函数时被赋值的,但C里的main函数没有上级函数调用,实际应用中感觉argc是运行时自动就有值了(即,*argv[]的维数加一),可这到底是怎么做到的啊???听着好像是人工智能
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

引用回帖:
26楼: Originally posted by as23p at 2012-08-06 22:41:50
请你以后注意点自己的说话方式。我是来求助的,不是来吵架的,“**是干嘛吃的”这种话你在日常生活中随便对个人这么说你看他不抽你才怪。
此外,我其实不太相信是Dos做的这事情;当然我也不是很懂,你愿意具体说说 ...

没人来这是吵架的.我说微软是干嘛吃的意思是你问的这些处理用户输入方式的确已经被微软写dos(或许该叫ms-dos)的时候写好了.
DOS(MS-DOS)其实是个操作系统(跟后来的windows系列带用户界面的操作系统本质上没有区别):用户输入->操作系统处理->返回输出.在窗口系统下,用户输入比较广泛,鼠标移动,点击,键盘都可以看做用户输入,但是在dos时代,用户只能通过键盘敲命令来进行输入.至于怎么处理这些输入,操作系统编译好交付用户运行之前,已经确定好了.这就是为什么你输入dir会得到当前目录下的所有文件信息,dos接受了字符串"dir",而且dos定义了接受dir后的行为.

你输入"a.exe inputfile outputfile"这种格式的字符串给dos,它会用空格切割字符串来判断输入参数的个数,跟你自己写的任何一个exe程序没有区别.这个行为可以从dos命令(特别是第一个参数,可执行文件的绝对路径)不接受带空格的路径来验证.如果输入带空格,必须用引号两边引起来或者用\来进行转义输入,否则它会从空格处截断.判断可执行文件参数就会出问题,如果你将可执行文件所在文件夹加入path环境变量,dos会在path指定的一系列路径中找到这个可执行文件(exe.bat等),否则会出错.一个很简单的例子
下面这个会出错
CODE:
C:\>e:\te st\test.exe
'e:\te' is not recognized as an internal or external command,
operable program or batch file.

下面这个却可以运行
CODE:
C:\>"e:\te st\test.exe"

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
28楼2012-08-06 23:56:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 30 个回答

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1
如果你这个函数编译完后叫test.exe
打开dos窗口运行时,输入(假设的): test.exe data.txt,那么argc==2,argv[0] = "test.exe", argv[1] = "data.txt",argc是命令行自动计算的,跟你的输入有关的.
一般写程序如果你明确知道你的函数在main中自动打开文件,读写/操作...,main函数可以无参数
int main()
{
...
}
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-08-03 16:06:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

as23p

木虫 (小有名气)

引用回帖:
2楼: Originally posted by libralibra at 2012-08-03 16:06:18
如果你这个函数编译完后叫test.exe
打开dos窗口运行时,输入(假设的): test.exe data.txt,那么argc==2,argv = "test.exe", argv = "data.txt",argc是命令行自动计算的,跟你的输入有关的.
一般 ...

我知道argc是自动计算的,我就是想知道它为什么能自己自动计算,是人工智能么???
3楼2012-08-04 00:14:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

引用回帖:
3楼: Originally posted by as23p at 2012-08-04 00:14:54
我知道argc是自动计算的,我就是想知道它为什么能自己自动计算,是人工智能么???...

给你一个字符串,你不是也能切割知道有几个空格分隔的子串吗?
控制台也不过是操作系统对于用户的一个接口啊,你运行程序输入的那行命令不就是个长串吗?它接收后按照空格切割一下,个数赋值给argc,子串存在argv[]啊
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2012-08-04 05:07:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见