在许多C++ IDE和编译器中,当它为您生成主函数时,它看起来像这样:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
当我在没有IDE的情况下编写C++代码时,只需使用命令行编译器,我输入:
int main()
Run Code Online (Sandbox Code Playgroud)
没有任何参数.这意味着什么,对我的计划至关重要?
每个程序都从main(int argc, char *argv[])
定义开始.
我不明白这意味着什么.如果我们在程序中不使用这些参数,有人可以解释为什么我们会使用这些参数,我会很高兴的吗?为什么不int main()
呢:?
程序的名称是其中的一个元素,*argv[]
并且argc
是参数个数的计数*argv[]
?发送到的其他参数是*argv[]
什么?我们如何发送它们?
main()
在C或C++应用程序中传递参数时,将argv[0]
始终是可执行文件的名称?或者这只是一个常见的约定,并不保证100%的时间都是真的?
我正在尝试在bash中编写一个函数来访问脚本命令行参数,但是它们被替换为函数的位置参数.如果函数没有显式传递,是否有任何方法可以访问命令行参数?
# Demo function
function stuff {
echo $0 $*
}
# Echo's the name of the script, but no command line arguments
stuff
# Echo's everything I want, but trying to avoid
stuff $*
Run Code Online (Sandbox Code Playgroud) 我的教授和几个学生正在争论是否argv
无效终止.我的朋友写了一个小程序,然后打印出来,null
但另一个孩子说他可能只是在阅读空白记忆.有人能解决这个问题吗?
所以我想知道命令行参数是否总是以空值终止?Google似乎是肯定的,并且在GCC上进行编译表明情况确实如此,但我可以保证这一切始终是真的吗?
int main(int argc, char** argv)
{
char *p;
for(int cnt=1; cnt < argc; ++cnt)
{
p = argv[cnt];
printf("%d = [%s]\n", cnt, p);
}
return 0;
}
$ MyProgram -arg1 -arg2 -arg3
1 = -arg1
2 = -arg2
3 = -arg3
Run Code Online (Sandbox Code Playgroud) 执行Java应用程序时,给定的进程名称通常为java.exe
或javaw.exe
.但是如何通过我的应用程序名称来调用它呢?
我想解析这样的字符串:
-o 1 --long "Some long string"
Run Code Online (Sandbox Code Playgroud)
进入这个:
["-o", "1", "--long", 'Some long string']
Run Code Online (Sandbox Code Playgroud)
或类似的.
这与getopt或optparse不同,后者以sys.argv解析的输入开头(就像我上面的输出一样).有没有标准的方法来做到这一点?基本上,这是"分裂",同时保持引用的字符串在一起.
到目前为止我的最佳功能:
import csv
def split_quote(string,quotechar='"'):
'''
>>> split_quote('--blah "Some argument" here')
['--blah', 'Some argument', 'here']
>>> split_quote("--blah 'Some argument' here", quotechar="'")
['--blah', 'Some argument', 'here']
'''
s = csv.StringIO(string)
C = csv.reader(s, delimiter=" ",quotechar=quotechar)
return list(C)[0]
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的python脚本,它应该扫描一个文本文件,其中包含格式为id =' value '的行并将它们放入一个dict中.python模块名为chval.py,输入文件名为in.txt.这是代码:
import os,sys
from os import *
from sys import *
vals = {}
f = open(sys.argv[1], 'r')
for line in val_f:
t = line.split('=')
t[1].strip('\'')
vals.append(t[0], t[1])
print vals
f.close()
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我得到:
回溯(最近一次调用最后一次):
文件"chval.py",第9行,在?f = open(sys.argv [1],'r')TypeError:需要一个整数
我正在使用python 2.4 ...因为我一直被要求不使用任何更新的东西,是否有一些我不知道的open()?为什么要整数?
该行之后的任何内容都是未经测试的.简而言之:为什么它会给我错误,我该如何解决?
从命令行向main()传递参数我所理解的是argc的最小值为1,而argv [0]将始终具有程序名称及其路径.
如果在命令行提供了参数,那么argc的值将大于1,而argv [argc-1]的argv将具有这些参数.
argv [0]将是包含程序名称的字符串,如果不可用,则为空字符串.
现在,argv [0]如何以及何时可以使用空字符串?我的意思是程序名称及其路径将始终可用,所以什么时候它可以为空?
作家说"如果不可用"但是何时以及如何可能无法获得该计划名称?