[英]Negative argument to a C program in execl detected as an option
我在该调用中使用了execl()
函数:
execl("/localhome/globususer/mandel", "-b", xmin, xmax, ymin, ymax, "-f", name, (char*)NULL);
所有xmin,xmax,ymin,ymax都通过以下方式初始化:
sprintf(xmin, "%f", (double)(XPOS - realmargin));
sprintf(xmax, "%f", (double)(XPOS + realmargin));
sprintf(ymin, "%f", (double)(YPOS - realmargin));
sprintf(ymax, "%f", (double)(YPOS + realmargin));
在目标程序(/ localhome / globususer / mandel)中,xmin和ymin被检测为选项,因为它们是负数。 因此getopt()
在其值上检测“-0”,并引发错误。
但是,从命令行直接调用,例如:
./mandel -b -0.452902 0.456189 0.367922 1.277013 -f /localhome/globususer/mandel.ppm
该程序正确理解。
有人有什么想法吗?
您正在错误地使用execl()
。 您应该将arg0
设置为可执行文件的名称:
execl("/localhome/globususer/mandel",
"/localhome/globususer/mandel",
"-b",
xmin,
xmax,
ymin,
ymax,
"-f",
name,
NULL);
从手册页 :
execl()
,execlp()
和execle()
函数中的const char *arg
和后续省略号可以被认为是arg0,arg1,...,argn 。 它们一起描述了一个或多个指向以null结尾的字符串的指针的列表,这些字符串表示执行程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名。
当mandel
使用你的原始参数列表运行getopt()
时,它跳过-b
(因为它在argv[0]
,并且它认为是可执行路径名),因此开始使用数字解析args( -0.452902
in你的例子)而不是-b
。 这使得它将-0
解释为一个选项,而你运气不好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.