首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调整argVector

调整argVector
EN

Stack Overflow用户
提问于 2018-10-02 15:27:18
回答 1查看 67关注 0票数 1

我的部分程序如下所示:

代码语言:javascript
运行
复制
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[] ={“./doTask”、"0“、"1”、"3“、NULL}

第二圈:

argVector[] ={“./doTask”、"1“、"4”、"3“、NULL}

第三圈:

argVector[] ={“./doTask”、"2“、"7”、"3“、NULL}

但在实际的控制台显示上:

第一圈:

argVector[] ={“./doTask”、"1“、"1”、"1“、NULL}

第二圈:

argVector[] ={“./doTask”、"4“、"4”、"4“、NULL}

第三圈:

argVector[] ={“./doTask”、"7“、"7”、"7“、NULL}

我当前的程序是关于Linux中的多进程(通过execvp()将argVector传递给子进程;doTasks.c是子进程要实现的另一个C程序)。无论如何,在走得太远之前,我现在已经被困在操纵argVector上了。有人能解释一下奇怪的输出吗?提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 15:34:58

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

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

你想要这个

代码语言:javascript
运行
复制
#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的2D数组,而不是指向char的指针数组。

代码语言:javascript
运行
复制
#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终止符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52611571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档