TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
1

Как динамически выделить память для строкового массива?

20.12.2010, 15:50. Показов 9782. Ответов 14
Метки нет (Все метки)

Собственно сам вопрос.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2010, 15:50
Ответы с готовыми решениями:

Как выделить динамически память для данных класса
Как выделить динамически память для данных класса ? class circle { double x,y,r; public:void...

Как динамически выделить память для конструкторов класса?
подскажите как динамически выделить память для конструкторов класса? class circle { double...

Как выделить память для динамического массива?
Как выделить память для динамического массива? typedef TPrimitives *TPrimitive; //......

Как выделить память для двухмерного массива?
Как выделить память для двухмерного массива в С++ a=new int???

14
377 / 357 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 15:52 2
C++
1
char *array=new char[размер массива];
1
899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
20.12.2010, 15:52 3
Василий-Робот, так же как и для числового.

C++
1
str=new char[N];
1
TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 16:01  [ТС] 4
А как обращаться потом к строке массива?
у меня к примеру массив А состоит из k строк. А когда пишу А[i], обращаясь к конкретной строке, то компилятор выдает:
invalid conversion from `char' to `const char*'
0
Эксперт С++
2345 / 1718 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2010, 16:04 5
Василий-Робот, используй вектор строк и забудь про динамическую память.
C++
1
2
3
4
5
6
7
8
9
#include <string>
#include <vector>
 
//...
std::vector<std::string> arr;
 
arr.push_back("First string");
arr.push_back("Second string");
//...
1
377 / 357 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 16:04 6
это строка, а не массив строк.
массив строк **array, точнее указатель на него
1
55 / 55 / 9
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
20.12.2010, 16:11 7
А так не подойдёт ?
C++
1
2
3
4
5
6
7
8
9
10
#include<string>
int main () {
 
 
const int n= 100;
string *h = new string[n];
 
...
 
}
1
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
20.12.2010, 16:58 8
а если использовать calloc()

char*a;
a=(char*)calloc(100,sizeof(char));

использовать можно примерно вот так
a[1]='g';
printf("%c",a[1]);
1
TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 23:03  [ТС] 9
Ребят спасибо всем за разнообразные ответы, но я в них просто запутался Чтобы было понятней и вам и мне, вот конкретный код. Строки 24, 31, 32
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
    int i,j,k=0,d,v=-1,s=0;
    printf("MENYU:\n1 -> vvod strok\n2 -> uporyadochivanie massiva\n");
    printf("3 -> peremesh'enie bukv\n4 -> vivod strok\n5 -> konec programmi\n");
    while(v<1 || v>5)
    {
              printf("X = ");
              scanf("%d",&v);
    }
    while(v!=5)
    {
               if(v==1)
               {
                       while(k<1 || k>5)
                       {
                                 printf("vvedite kol. strok: ");
                                 scanf("%d",&k);
                       }
                       char buf[100];
                       char *A=new char[k];
                       for(i=0;i<k;i++)
                       {
                                       d=1;
                                       while(d<2)
                                       {
                                                 printf("vvedite strokã #%d:\n",i+1);
                                                 scanf("%s",A[i]);
                                                 d=strlen(A[i]);
                                       }
                       }         
                       s++;  
               }
               if(v==2 && s>0)
               {
                       for(i=0;i<n;i++)
                       for(j=i+1;j<n;j++)
                       if(A[i]>A[j])
                       {
                                    buf=A[i];
                                    A[i]=A[j];
                                    A[j]=buf;
                       }
                       printf("MASSIV POSLE SORTIROVKI:\n");
                       for(i=0;i<k;i++)
                       printf("stroka #%d:\n%s\n",i+1,A[i]);
               }
               if(v==3 && s>0)
               {
                       printf("\nSTROKOVIY MASSIV:\n");
                       for(i=0;i<k;i++)
                       printf("stroka #%d:\n%s\n",i+1,A[i]);    
               else printf("strokoviy massiv esh'e ne vveden!");          
               }
               if(v==4 && s>0)
               {
                       }
                       }
    else 
    {
         printf("programma end");
    }
               
               
               
               
               
               
    
               
    getch();
    return 0;
}
Добавлено через 5 часов 54 минуты
Ау!) Давайте, помогайте!
0
55 / 55 / 9
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
21.12.2010, 03:41 10
Смотри, впринцыпе если бы ты писал на С++, то можно было бы создать строковый массив очень просто:
C++
1
2
3
4
#include<string>
int k;
cin>>k;
string *g = new string[k];
и дальше обращаешся к каждой строке через указатель g[i]

Если ты всё-же решишь писать на С, то придётся создать 2-мерный массив типа char:
C
1
2
3
4
5
6
7
8
#include<stdio.h>
 
int nstr; - количество строк;
int nstb; - максимальная длина строки;
scanf("%d, %d" &nstr, &nstb);
char **t = new char *[nstr]; //Это буде указатель на массив указателей типа char * (т.е. на строки)
for (int i = 0; i<nstr; i++)
t[i] = new char [nstb]; // Выделяем каждой строке массив типа char
Дальше к каждой строке обращаешся через t[i]
К каждому символу обращаешся через t[i][j]
1
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
21.12.2010, 04:00 11
romedal, Не надо так делать, а? Зачем в STL впихивать работу с памятью, если есть вектор, список и иже с ним?
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
21.12.2010, 16:00 12
а можно офтоп? =)

а чем плохо динамическое выделение памяти через calloc\malloc ?
0
899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
21.12.2010, 16:03 13
Цитата Сообщение от no0ker Посмотреть сообщение
а чем плохо динамическое выделение памяти через calloc\malloc ?
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
0
Эксперт С++
2345 / 1718 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
21.12.2010, 19:15 14
Цитата Сообщение от MILAN Посмотреть сообщение
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
Дело не в вариантах. new в отличии от malloc вызывает конструкторы. delete в отличии от free деструкторы.
0
55 / 55 / 9
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
24.12.2010, 01:04 15
Ну в общем-то да, просто я немного зациклился на задании "динамически выделить память" так сказать "от руки" )))
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2010, 01:04
Помогаю со студенческими работами здесь

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*В одномерном массиве, состоящем из n вещественных элементов, вычислить: - количество элементов...

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*Проверить, все ли строки матрицы содержат хотя бы один отрицательный элемент Если да, то...

Как выделить память для массива структур?
выделить пямять для такой структуры на n элементов typedef struct coordinates { float x; float...

Как выделить память для двумерного массива указателей в куче?
Есть массив вида: unsigned char *ddtКак выделить память для такого массива в куче? Должен...

Как в отдельной функции выделить память для динамического массива, объявленного в main
Доброго времени суток. Передо мной стоит задача выделения памяти для динамического массива в...

Как динамически выделить память под массив неизвестной длинны? Длина определяется вводом с командной строки
Например, надо получить фамилию, имя и отчество пользователя через командную строку.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru