gpt4 book ai didi

c - 如何在 C 语言中的 char* argv[] 数组末尾追加一个值?

转载 作者:行者123 更新时间:2023-11-30 20:45:34 25 4
gpt4 key购买 nike

如何在 C 中的 (char* argv[]) 数组的末尾附加一个值。基本上我正在尝试解决一个问题,即父级将命令行参数(在 argv[])传递给子级添加数字。我为每两个数字创建一个子项并将它们传递到 argv[] 中。想要将子进程返回的结果和再次追加到父进程中以创建子进程,直到数量减少到1。

最佳答案

编辑问题后

Basically I am trying to work on a problem where parent will pass the command line args (in argv[]) to the child for adding the numbers. I am creating a child for every two numbers and passing them in argv[]. I want to append the result sum returned from the child again to parent's to create child process until the number reduces to one.

这是不可行的;子进程的内存与父进程的内存完全分开。 child 无法直接修改 parent 的内存。您将需要使用某种形式的 IPC(进程间通信)来从子进程获取信息。

你当然可以将论点传递给 children ;这是(相对)直接的。但是,您将需要一种机制,例如管道,供父级从子级检索答案。

请注意,这种机制作为说明进程间通信所涉及问题的一种方式是有意义的;它作为一种累加数字的方式没有意义,因为与在单个程序中完成工作的成本相比,进程启动和 IPC 的开销是巨大的。

编辑问题之前

How to append a value at the end of the (char* argv[]) array in C.

如果您想这样做,您必须:

  1. 分配一个足够大的新数组来容纳额外的值。
  2. 将旧数组中的现有值复制到新数组。
  3. 添加您的新值(value)。
  4. 确保代码的其余部分在适当的时候使用 argcargv 的新值。
  5. 确保在不再需要新的 argv 时释放它(除非您的程序在使用新值完成时正在退出或执行,在这种情况下,您不需要不需要释放它)。

概述:

char **newv = malloc((argc + 2) * sizeof(*newv));
// Error check omitted
memmove(newv, argv, sizeof(*newv) * argc);
newv[argc] = new_value;
newv[argc+1] = 0;
argc++;
argv = newv;

...

free(newv);

关于c - 如何在 C 语言中的 char* argv[] 数组末尾追加一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com