gpt4 book ai didi

c - 调整 argVector

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:01 27 4
gpt4 key购买 nike

我的部分程序如下所示:

char *argVector[] = {"./doTasks","0", "1", "3", NULL};
int numChild = 3;
int temp;
char tempstring[100];

for (int i = 0; i < numChild; i++)
{
temp = sprintf(tempstring, "%d", i);
argVector[1] = tempstring;
temp = sprintf(tempstring, "%d", 1 + i*3);
argVector[2] = tempstring;
printf("argVector is now: %s %s %s %s %s\n", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}

我的预期输出如下:

第一个循环:

argVector[] = {"./doTasks", "0", "1", "3", NULL}

第二个循环:

argVector[] = {"./doTasks", "1", "4", "3", NULL}

第三个循环:

argVector[] = {"./doTasks", "2", "7", "3", NULL}

但是在实际的控制台显示上我得到了:

第一个循环:

argVector[] = {"./doTasks", "1", "1", "1", NULL}

第二个循环:

argVector[] = {"./doTasks", "4", "4", "4", NULL}

第三个循环:

argVector[] = {"./doTasks", "7", "7", "7", NULL}

我现在的程序是关于 Linux 中的多处理(通过 execvp() 将 argVector 传递给子进程;doTasks.c 是另一个 C 程序供子进程实现)。无论如何,在走得太远之前,我现在已经陷入了操纵 argVector 的困境。有人可以解释奇怪的输出吗?非常感谢!

最佳答案

请注意,与其他语言不同,C 中没有真正的字符串类型。

char *argVector[] 不是一个字符串数组,而是一个指针数组。

你想要这个:

#include <stdio.h>

int main()
{
char *argVector[] = { "./doTasks","0", "1", "3", NULL };
int numChild = 3;
char string1[100];
char string2[100];

for (int i = 0; i < numChild; i++)
{
sprintf(string1, "%d", i);
argVector[1] = string1;
sprintf(string2, "%d", 1 + i * 3);
argVector[2] = string2;
printf("argVector is now: %s %s %s %s %s\n", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}
}

我还删除了 int temp;,因为它在这里没用。

另一种可能性是使用 char 的二维数组而不是指向 char 的指针数组:

#include <stdio.h>

int main()
{
char argVector[5][20] = { "./doTasks","0", "1", "3", NULL };
int numChild = 3;

for (int i = 0; i < numChild; i++)
{
sprintf(argVector[1], "%d", i);
sprintf(argVector[2], "%d", 1 + i * 3);
printf("argVector is now: %s %s %s %s %s\n", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}
}

这样我们甚至不需要string1,我们可以直接“打印”到argVector

此处 argVector 或多或少是一个包含 5 个字符串的数组,每个字符串最多包含 20 个字符,包括 NUL 终止符。

关于c - 调整 argVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611571/

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