Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > динамический массивы


Автор: admsasha 25.10.2006, 12:10
Может у кого есть ссылка на подробное описание "динамический массивы с C++", попытался поискать в поисковых, но попадается один и тот же пример.

Вообще мне нужно запихать в этот массив слова (не из файла, они образуются внутри программы, можно rand), осортировать, и сделать форматированный вывод.

Автор: powerfox 25.10.2006, 14:28
А документация по STL не годится? Используйте vector.
Код

#include <vector>
#include <string>
...
std::vector<std::String>MyCoolArray(Size);

//если надо изменить размер:
MyCoolArray.resize(MyCoolArray.size() + NewElements);

//работать с вектором можно, как c люычым массивом
MyCoolArray[0] = "Reading documentation is good thing";

Автор: admsasha 25.10.2006, 16:12
А для вывода в printf как я должен написать ?
printf("%s",MyCoolArray[0]);  - так не работает
через cout не нужно

Автор: powerfox 25.10.2006, 16:29
admsasha:
Код

printf("%s",MyCoolArray[0].c_str());


Автор: bsa 25.10.2006, 16:29
конечно не работает. Ты бы про std::string доку почитал для начала. smile
в твоем случае надо писать так:
Код
printf("%s",MyCoolArray[0].c_str());

Автор: MAKCim 25.10.2006, 21:24
Цитата

А для вывода в printf как я должен написать ?
printf("%s",MyCoolArray[0]);  - так не работает
через cout не нужно 

Извращение одновременно пользоваться STL-контейнерами и стандартной библиотекой С

Автор: powerfox 25.10.2006, 22:27
Цитата(MAKCim @  25.10.2006,  22:24 Найти цитируемый пост)
Извращение одновременно пользоваться STL-контейнерами и стандартной библиотекой С

Абсолютное и неоригинальное smile

Автор: Dimonius 23.11.2006, 14:28
А как организовать динамический массив в С?
Пишу программу на С, которая читает числа из файла и складывает их в массив. Так вот хочу реализовать динамический массив, чтобы размерность его соответствовала размерности файла.
Возможно ли такое реализовать средствами С? А то как то создавать массив размерности на все случаи жизни не представляется возможным smile

Добавлено @ 14:39 
Следующий код:
Код
int **ReadMatrix(char *FileName)
{
    FILE *fp;
    int **nums;
    int row=0, col=0;
    int i=0, j=0;
        
    if((fp = fopen(FileName,"r"))==NULL) {
        puts("Can't open file");
        exit(1);
    }
    
    fscanf(fp,"%d %d",&row,&col);
    printf("Row:%d Col:%d\n",row,col);
    nums = (int **) malloc(row*col*sizeof(int));
    
    for (i=0;i<row;i++) {
        for (j=0;j<col;j++) {
            fscanf(fp, "%d", &nums[i][j]);
            printf("nums[%d][%d]=%d\n",i,j,nums[i][j]);
        }
    }
    
    fclose(fp);
    return nums;
}

дает ошибку Segmentation fault на попытке записать в массив nums что не так?                        

Автор: GrayCardinal 23.11.2006, 14:56
Цитата

А то как то создавать массив размерности на все случаи жизни не представляется возможным

  smile

Дык правильно, у тебя не 
int **  (указатель на массив указателей на int)
а просто
int * (указатель на массив) 
Я так понимаю это должна была быть матрица ? 
тогда так
nums = (int **) malloc(col*sizeof(int *));
и для каждого nums'а
nums [n] = malloc (rows * sizeof (int))
Ну, или типа того smile
по логике после этого означенный фор должен сработать.........7

Автор: Dimonius 23.11.2006, 18:22
GrayCardinal большое спасибо.
Ступил что то smile

Автор: V.A.KeRneL 10.12.2006, 12:43
Цитата(GrayCardinal @ 23.11.2006,  14:56)
nums = (int **) malloc(col*sizeof(int *));
и для каждого nums'а
nums [n] = malloc (rows * sizeof (int))

Не удержался от того, чтоб поправить!..
Надо так: 
Код

nums = (int **) malloc(row * sizeof(int *));
for (i = 0; i < row; ++i) { 
    nums[i] = (int *) malloc(col * sizeof(int));
}


Автор: GrayCardinal 11.12.2006, 17:11
V_A_KeRneL, 
Какая наблюдательность.  smile 
Но я все-таки предпочитаю думать что чел уловил суть а не тупо списал код  smile 

Автор: admsasha 11.12.2006, 18:10
Цитата(GrayCardinal @  12.12.2006,  00:11 Найти цитируемый пост)
V_A_KeRneL, 
Какая наблюдательность.   
Но я все-таки предпочитаю думать что чел уловил суть а не тупо списал код    

Извеняюсь, что сразу не поменил вопрос как решенный. Но вы уже давно всё ответили :-)

Автор: V.A.KeRneL 16.12.2006, 00:56
Цитата(GrayCardinal)

V_A_KeRneL, 
Какая наблюдательность.  smile 
Но я все-таки предпочитаю думать что чел уловил суть а не тупо списал код  smile


GrayCardinal, нет проблем. Наблюдательность я, действительно, тренирую. smile То, что Вы говрите, правильно. Понять суть решения проблемы, разумеется, необходимо. Но, по мне, также правильно и то, чтобы в нашем форуме было как можно больше работающих кусков кода. Хотя бы для новичков, не таких как я или Dimonius, а совсем новичков, которые впервые сюда зашли и думают/смотрят/прикидывают стоит ли здесь оставаться или поискать другой форум. С другой стороны, понимать, безусловно, нужно, но и мне самому обычно приятно, когда есть готовый корректный и красивый код, в котором просто нужно разобраться, а потом вставить, куда следует, чем разбираться, а потом ещё править неработающий код или самому писать велосипед... Это, конечно, относится не к данному простейшему случаю; это есть принцип!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)