繁体   English   中英

execl中的C程序的否定参数被检测为一个选项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM