数组仅添加重复值

时间:2014-01-23 04:24:48

标签: c

当我打印数组的内容时,似乎用输入的最后一个命令覆盖每个元素:

typedef struct
{
  int   argc;
  char* argv[10;
  char* myArray[80];
  size_t size;

} Command;

内部主要:

Command cmd;

cmd.myArray[cmd.size++] = buffer;

(缓冲区是我用printf检查过的用户输入,以确保它是正确存储的东西)

功能:

void myFunction(const Command* cmd)
{
  for (size_t i = 0; i < (cmd->size)-1; ++i)
    {
      printf("%s\n", cmd->myArray[i]);
    }
}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

您正在将myArray的每个元素设置为相同的内容buffer。您需要复制它以获得不同的值:

char *temp = malloc(strlen(buffer)+1);
strcpy(temp, buffer);
cmd.myArray[cmd.size++] = temp;

答案 1 :(得分:2)

此分配转移缓冲区的所有权:

cmd.myArray[cmd.size++] = buffer;

换句话说,从那个赋值开始,你不能修改缓冲区,因为这样做会改变以前存储的命令。为了使其正常工作,您需要复制缓冲区,或者在每次迭代时分配一个新缓冲区。如果您想使用副本,请添加对strdup的调用:

cmd.myArray[cmd.size++] = strdup(buffer);

如果您希望分配新缓冲区,请添加

cmd.myArray[cmd.size++] = buffer;
buffer = malloc(BUF_SIZE); // buffer needs to be a `char *`

答案 2 :(得分:0)

如果buffer也是char *,你可能需要这样的东西:

cmd.myArray[cmd.size++] = buffer[cmd.size];