c - 将参数传递给生成的进程在 C 中不起作用

标签 c string pointers embedded

我需要将两个地址(32 位)传递给由 C 中的 execl 命令生成的进程,如下所示。在第一个程序中:

  char buffer[18];
  sprintf (&buffer[0],"%x\0 %x\0",lock, count);
  arg_list[0]=&(buffer[0]);
  arg_list[1]=&(buffer[10]);
  execl ("/somedirectory/second_process", arg_list[0], arg_list[1], NULL);

然后在我的第二个程序中,我尝试按如下方式解析地址:

  if (argc != 2) {
      printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc);
      return -1;
  }

 if ( !(sscanf (argv[1],"%x",&lock)) || !(sscanf (argv[2],"%x",&count)) ) {
      printf ("PROCESS 2: Problem with parameters passed in");
      return -1;

但是我的程序一直报错说传入的参数无效。当我尝试打印出收到的参数时,我的程序挂起。

 printf ("The arguments passsed in are %s %s", argv[1], argv[2]);

已修复:

我错误地调用了 execl。应该是:

  execl ("/somedirectory/second_process", "second_process" arg_list[0], arg_list[1], NULL);

也在过程 2 中:

  if (argc != 3) {
      printf ("PROCESS 2: Invalid number of arguments. Terminating %i\n", argc);
      return -1;
  }

因为传入的第一个参数应该是下面 Chris 建议的进程名称。

谢谢!

最佳答案

在 C 中数组总是基于 0,所以你的两个参数将是 argv[0]argv[1],以及 argv[2] 将是空指针,因此 sscanf 将失败、崩溃或挂起。

现在通常您应该始终将程序名称作为第一个 (argv[0]) 参数传递。所以你想要:

execl ("/somedirectory/second_process", "second_process", arg_list[0], arg_list[1], NULL);

也就是说,您实际上应该传递三个参数(因此在第二个程序中为 argc == 3)。

关于c - 将参数传递给生成的进程在 C 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537678/

相关文章:

c - 在循环中计算功率时值错误

C# 将字符串拆分为单独的变量

c# - 参数超出范围

转换指针 - 运行时有什么区别?

pointers - Golang 指向值的指针字符串

c - 为什么提到的代码在 C 中是未定义的行为

c - 我的 contains 函数有什么问题?

c - #如果已定义 (x) || (y) ;这是有效的吗?

java - 逐字符比较java中的两个字符串

pointers - 带有原始指针的静态结构给出 "` core::marker::Sync` 未实现...”