Ввод и вывод строк в динамическом массиве в отдельных функциях

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
#include <string.h>

void init(int *p, int size)//Функция ввода строк в массив
{
    int i;
    for(i=0; i<size; i++)
    {
        gets(p[i]);
        if(!*p)break;
    }
}

int main()
{
setlocale(LC_ALL, "Rus");
    int i;
    int size;
    int *p = NULL;
    p = (char*) malloc(size * sizeof(char));//Выделение памяти
init(p, size);

return 0;
}

Помогите разобраться как правильно сделать ввод и вывод строк вводимых пользователем в динамическом массиве. P.S Начинающий


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

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

Как-то так:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <locale.h>
#include <string.h>
#include <errno.h>

//Функция ввода строк в массив
void input_strings(char *p[], ssize_t  size)
{
    int j;
    ssize_t len, n;

    for(j=0; j<size; j++) {
        p[j] = NULL;
        n = 0;
        printf("> ");
        len =  getline(&p[j], &n, stdin);
        if (len < 0) {
            perror("getline: ");
            exit(-1);
        }
    }
}

//Функция вывода строк из массива
void output_strings(char *p[], ssize_t size) {
    int j;

    for(j=0; j<size; j++) {
        printf("%s", p[j]);
        free(p[j]);
    }
};

#define ARR_LEN 5

int main(int argc, char *argv[])
{
    // В люнихе это не нужно
    // setlocale(LC_ALL, "Rus");

    int size = ARR_LEN; // Будем работать с пятью строками
    char *p[ARR_LEN];   // Указатель на МАССИВ строк

    // Вводим строки
    input_strings(&p[0], size);

    // Выводим введённые строки
    printf("\n-----\n");
    output_strings(&p[0], size);
    printf("-----\n");

    return 0;

}
→ Ссылка