数组仅添加重复值

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

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

内部主要:

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

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

function:

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

任何帮助将不胜感激。

你将myArray每个元素设置为同一个东西, buffer 。 您需要复制它以获得不同的值:

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

此分配传输缓冲区的所有权:

 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 *` 

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

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