【发布时间】:2014-05-29 02:13:29
【问题描述】:
我想在命令行中给出几个参数,比如:
./programName -a 103 -p argument1,argument2,argument3
然后,我想用这些参数的值创建几个变量:一个整数变量用于标记-a 之后的数字,一个整数变量用于标记-p 之后的参数数量和一个数组变量与所有这些论点。
它总是相同的参数(所以我的代码不能管理其他形式的输入):-a(整数)-p(用,分隔的参数列表)
我的问题是存在分段错误。在多次尝试查看它发生的位置后(使用多个printf),当变量 a = 3 时(因此在标志 -p 处)存在分段错误。并且分割发生在“case 'p'”这一行。
我不明白为什么这段代码接受参数“-a”而不接受“-p”。而且我认为我的代码在“case 'p'”中没有错误,因为之后发生分段错误(在“case 'p'”行上)。
我希望你能理解我的问题并感谢你的帮助:)。
编辑:
感谢 Mark Wilkins 和 ooga 的回答。分段错误确实是由于未初始化的数组的各个元素。 如果有些人不知道如何有效地初始化一个字符串数组,请检查this other question,它的解释很好;):
【问题讨论】:
-
你确定你在使用
char* chrp = argv[p+1];吗?因为没有定义 p... -
当代码执行
number_a = strtol(argv[a+1],NULL,10);时,它不知道argv[a+1];不为NULL。也许使用for( ;a < (argc-1); ) -
还没有完成,但你的休息应该没有花括号?
-
正如您所承认的,有很多问题适用于这个确切的输入但会中断其他输入。例如,
number_p应在case P中重置为0。如果您有除-a和-p之外的任何参数,那么您的for循环永远不会前进(无限循环)。如果你有-a或-p后面没有参数,那么你取消引用一个空指针。等等。
标签: c shell command-line segmentation-fault command-line-arguments