我的程序的一部分如下所示:
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 %sn", 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", "1", NULL}
第二循环:
argVector[] = {"./doTasks", "4", "4", "4", "4", NULL}
第三循环:
argVector[] = {"./doTasks", "7", "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 %sn", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}
}
我也删除了int temp;
因为它在这里毫无用处。
另一种可能性是使用char
的 2D 数组,而不是指向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 %sn", argVector[0], argVector[1], argVector[2], argVector[3], argVector[4]);
}
}
这样我们甚至不需要string1
,我们可以直接"打印"成argVector
。
这里argVector
或多或少是一个由 5 个字符串组成的数组,每个字符串最多可以包含 20 个字符,包括 NUL 终止符。