Создание динамического массива строк, на который указывает указатель на константный символ - PullRequest
1 голос
/ 22 декабря 2010

Я хотел бы создать массив в C, который динамически растет и хранит строки. И хотел бы указать этот массив указателем. Как мне это сделать? Любые предложения будут высоко оценены. Поток программы, которую я хочу сделать, выглядит следующим образом:

program takes input say int i =5;
create an string array of length 5
insert the string into the array.
suppose x1,x2,x3,x4,x5
and i want that array to be pointed by the const char pointer 

[EDIT]

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

Как я подхожу:

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

Я не так привык к C. Ожидаю некоторой помощи.

Спасибо

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Вот пример:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int numElem = 0;

    scanf("%d", &numElem);

    printf("numElem: %d", numElem);

    char *string = (char *) malloc( (numElem * sizeof(char)));
    //checking of NULL here in case malloc fails
    //...

    //enter you chars here...
    //etc...

    return 0;
}

Основная идея этого фрагмента - использовать: char *string = (char *) malloc( (numElem * sizeof(char)));, чтобы сделать его динамичным.
Надеюсь, это поможет.

1 голос
/ 22 декабря 2010

Идея состоит в том, чтобы использовать malloc.Предположим, что это ваш const char указатель:

const char *string;

теперь вы выделяете столько места, сколько хотите с malloc:

string = malloc(number_of_chars_in_the_string);
// don't forget to test that string != NULL

Если это окажется слишком маленькимВы можете изменить его размер:

string = realloc(string, new_size);

когда вы закончите с этим, вы освободите память:

free(string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...