Массив только добавляет повторяющиеся значения

Когда я печатаю содержимое моего массива, он, кажется, переопределяет каждый элемент с последней введенной командой:

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

Если буфер также является символом char *, вам может понадобиться нечто подобное:

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