Как вывести все строки, записанные в массив указателей на строки, а не последнюю строку?

Вводится 3 строчки любого содержания, передаются в массив указателей не строки, я пытаюсь вывести все строчки во втором цикле, однако 3 раза выводится только последняя вводимая строчка. Вопрос: как вывести все строчки?

#include <stdio.h>
#include <string.h>
    void main() {
        char s[1000];
        const char* pwpw[10] = {};
        for (int i = 1; i < 4; i++) {
            gets_s(s);
            pwpw[i] = s;
        }
        for (int i = 1; i < 4; i++) {
            puts(pwpw[i]);
        }
    }

Ответы (1 шт):

Автор решения: Harry

И что у вас получается?

gets_s(s);
pwpw[i] = s;

Т.е. вы считываете все строки в s, и каждая последующая перезаписывает предыдущую. А в массив pwpw вы вносите одно и то же значение — адрес этой строки. Вот и получается, что все элементы указывают на одну и ту же строку, последнюю записанную.

Писать надо в разные места. Например, выделяя память динамически

void main()
{
    char* pwpw[10];
    for (int i = 1; i < 4; i++) {
        pwpw[i] = malloc(256);
        gets_s(pwpw[i],256);
    }
    for (int i = 1; i < 4; i++) {
        puts(pwpw[i]);
    }
}
→ Ссылка