Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Василий-Робот
TECHNO
 Аватар для Василий-Робот
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 15:50     Как динамически выделить память для строкового массива? #1
Собственно сам вопрос.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 15:52     Как динамически выделить память для строкового массива? #2
C++
1
char *array=new char[размер массива];
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
20.12.2010, 15:52     Как динамически выделить память для строкового массива? #3
Василий-Робот, так же как и для числового.

C++
1
str=new char[N];
Василий-Робот
TECHNO
 Аватар для Василий-Робот
26 / 26 / 5
Регистрация: 04.11.2009
Сообщений: 366
20.12.2010, 16:01  [ТС]     Как динамически выделить память для строкового массива? #4
А как обращаться потом к строке массива?
у меня к примеру массив А состоит из k строк. А когда пишу А[i], обращаясь к конкретной строке, то компилятор выдает:
invalid conversion from `char' to `const char*'
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 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");
//...
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 14.12.2010
Сообщений: 1,265
20.12.2010, 16:04     Как динамически выделить память для строкового массива? #6
это строка, а не массив строк.
массив строк **array, точнее указатель на него
romedal
 Аватар для romedal
53 / 53 / 1
Регистрация: 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];
 
...
 
}
no0ker
100 / 87 / 4
Регистрация: 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]);
Василий-Робот
TECHNO
 Аватар для Василий-Робот
26 / 26 / 5
Регистрация: 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 минуты
Ау!) Давайте, помогайте!
romedal
 Аватар для romedal
53 / 53 / 1
Регистрация: 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]
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.12.2010, 04:00     Как динамически выделить память для строкового массива? #11
romedal, Не надо так делать, а? Зачем в STL впихивать работу с памятью, если есть вектор, список и иже с ним?
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
21.12.2010, 16:00     Как динамически выделить память для строкового массива? #12
а можно офтоп? =)

а чем плохо динамическое выделение памяти через calloc\malloc ?
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
21.12.2010, 16:03     Как динамически выделить память для строкового массива? #13
Цитата Сообщение от no0ker Посмотреть сообщение
а чем плохо динамическое выделение памяти через calloc\malloc ?
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.12.2010, 19:15     Как динамически выделить память для строкового массива? #14
Цитата Сообщение от MILAN Посмотреть сообщение
Не чем не плохо, просто ето как бы Сишный вариант, а в С++ используется new delete!!!!
Дело не в вариантах. new в отличии от malloc вызывает конструкторы. delete в отличии от free деструкторы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2010, 01:04     Как динамически выделить память для строкового массива?
Еще ссылки по теме:

C++ Как динамически выделить память для конструкторов класса?
Как выделить память для двумерного массива указателей в куче? C++
C++ Выделить память для трехмерного массива и изменить индексы начального элемента массива

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

Или воспользуйтесь поиском по форуму:
romedal
 Аватар для romedal
53 / 53 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
24.12.2010, 01:04     Как динамически выделить память для строкового массива? #15
Ну в общем-то да, просто я немного зациклился на задании "динамически выделить память" так сказать "от руки" )))
Yandex
Объявления
24.12.2010, 01:04     Как динамически выделить память для строкового массива?
Ответ Создать тему
Опции темы

Текущее время: 22:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru