数组仅添加重复值
当我打印我的数组的内容时,似乎用输入的最后一个命令覆盖每个元素:
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];