C: двумерный массив динамических размеров - PullRequest
0 голосов
/ 07 октября 2018

Я довольно новичок в C и также смущен распределением памяти для массивов и тем фактом, что строки хранятся в виде массивов символов.

Я хочу создать двумерный массив строк с n строки, 2 столбца и длина строки переменного размера.Таким образом, его структура будет выглядеть следующим образом.

char people = {
    {"name1..", "info.."},
    {"name2..", "info.."},
    {"name3..", "info.."},
}

Я принимаю n в качестве пользовательского ввода, поэтому я знаю, сколько строк будет иметь массив.

Как бы я определилтакой массив с помощью malloc и изменить размер пространства, выделенного для строк, в то время как пользователь вводит с помощью realloc.Или есть лучший способ для хранения таких данных в C?

Я бы хотел использовать их следующим образом:

printf("%s", people[0][0]);
prints: name1..

people[0][0][4] = 'E';
//Change the fifth letter of this element to for example E

Я пробовал довольно много вещей, ноКажется, ничто из того, что я пытаюсь сделать, работает так, как я хочу.

1 Ответ

0 голосов
/ 07 октября 2018

Используя указатель на char *, вы можете достичь ваших требований.

Рассмотрим приведенный ниже пример в качестве справочного.

char ***arr; // to hold n*2 strings

int n =3;
arr = malloc(n*sizeof(char **));

int i = 0;
for (i =0;i<n;i++)
{
        arr[i] = malloc(2*sizeof (char *)); // to hold single row (2 strings)

        arr[i][0] = malloc(10); // to hold 1st string
        arr[i][1] = malloc(10); // to hold 2nd string

        strcpy(arr[i][0],"name");
        strcpy(arr[i][1],"info");

        arr[i][0][4] = 'E';    // As you wished to change particular char

        printf("%s %s", arr[i][0], arr[i][1]);
        printf("\n");
}

И для изменения размера конкретной строки вы можете использовать realloc, как показано ниже.

char *temp;
temp = realloc(arr[1][0], 100);

arr[1][0] = temp;

Отказ от ответственности: у меня нетдобавлены все ограничения и проверки ошибок.

...