Как вывести все строки, записанные в массив указателей на строки, а не последнюю строку?
Вводится 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]);
}
}