我是编程新手,这让我感到困惑。
我正在编写一个由mah
调用的函数,该函数接受命令行参数并将它们存储在main
中以供稍后使用。此特定示例用于图像编辑,但可以在任何地方使用。
期望的性能:函数从命令行获取参数。确定并检查了三个具体参数:struct
,-h
和-o
。如果存在,他们将改变-t
值。参数struct
和-o
将紧随其后的参数存储到各自的-t
字段中。任何非struct
或前面没有-h
或-o
的参数都被认为是输入文件名并存储在-t
中。如果考虑了所有参数,那么flag->inputFile
应该保持flag->inputFile
并且可以在主函数中进行测试,如果这是真的则程序终止。
问题:如果没有指定输入文件(使用上述参数),NULL
在作为参数包含时会一直设置为flag->inputFile
。
解决方案:感谢Scott,通过用-o
替换多个if
语句已经解决了这个问题,现在似乎解决了问题,并且该功能似乎正在运行如预期的。
我对正在发生的事情的理解是else if
语句在else
的每次迭代中运行,除非包含i
参数,因为它是-t
之前的语句}
我正在使用的编译器是gcc,这是我的代码。 (我知道我的结构没有包装,我仍然试图解决这个问题,看不出它会如何导致我看到的。分段错误,是的,但不是吗?)
else
我为这个问题的第一个版本的糟糕格式道歉,并希望这个编辑更好。我已经使函数的期望结果和我遇到的问题更加清晰,并删除了我通过代码获得的大多数测试打印并添加了一些注释。我还包括我的问题的解决方案(由另一个用户提供)和我对破坏的代码中发生的事情的理解。
如果人们仍然认为这是一个糟糕的问题,或者对其他人没有用处,那么我很乐意将其删除,但是已经编辑并将其留下来希望它可以帮助其他人。
这是我关于堆栈溢出的第一篇文章,感谢大家的帮助和耐心,同时我学习了编码和发布问题的最佳方式。
答案 0 :(得分:1)
每当flag->inputFile = arg
不是arg
时,"-t"
设置else
("-t"
后测试arg
)。我不确定你什么时候想要分配给这个领域,但我确信这不是正确的逻辑。例如,如果您想在if ... else if ... else if ... else
不是您要查找的其他特定标志时执行此操作,则应使用JOIN
。