当我打印数组的内容时,似乎用输入的最后一个命令覆盖每个元素:
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]);
}
}
非常感谢任何帮助。
答案 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];