С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215

Запись вектора строк в массив указателей на тип char

15.12.2013, 15:29. Показов 5003. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решаю задачу 4.34 из книги Липпмана С. Язык программирования С++. Вводный курс. 4-е изд.
Задание:
1) Напишите программу, читающую строки в вектор.
2) Скопируйте этот вектор в массив указателей на тип char.
Вообще там 4 задания, но у меня проблемы уже со 2м.
Да, задача довольно известная, и даже на этом форуме есть тема, в которой предложено решение.
Но я поставил себе 2 дополнительных условия.
1. Не использовать многомерные массивы (так как это только следующая тема в книге);
2. Не использовать индексацию на векторы и массивы, а использовать только итераторы и указатели.

Вот код функции main.

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
vector<string> str_vec;           // вектор строк, введеных с клавиатуры
int main()
{   string s_temp;               // в данный момент исполняет функцию переменной текущей прочитанной строки
                                          // котороая будет записана в конец вектора строк.
 
    while(cin >> s_temp)                            // пока есть ввод
        str_vec.push_back(s_temp);      // добавлять в конец вектора строку s_temp
 
// ВОТ ТУТ самое сложное и непонятное мне
        const char **p_arr = new const char *[str_vec.size()];               //создаю указатель на первый элемент
// динамического массива, каждый элемент которого является указателем. Т.б. получается указатель на указатель. 
//Предполагется что этот указатель всегда будет указывать на 1й элемент массива.
 
        const char **p_to_arr=p_arr; // создаю указатель, которым буду перебирать массив указателей, и 
//присваиваю ему начальное значение начала массива. (Опять же, получается это указатель на указатель)
 
        
        for (vector<string>::iterator str_it=str_vec.begin();str_it!=str_vec.end();++str_it, ++p_to_arr) // здесь 
// итератором читаю каждый элемент вектора, и записываю его в переменную s_temp, которая теперь выполняет 
//функцию хранения текущей строки для последущей записи указателя на отвечающую ей С-stryle строку в массив 
//указателей p_arr
        {
                s_temp=*str_it;
                *p_to_arr=s_temp.c_str(); // в 1м прогоне цикла  p_to_arr = p_arr, потом оно каждый раз 
// инкрементируется циклом for. 
 
//Как пишут .c_str(); - дает указатель на С-строку, который я записываю в ячейку массива указателей, в ту ячейку
// на которую указывает  p_to_arr.  Мне кажется, что ошибка где-то здесь в операторе присвоения.
                
        }
        
// Далее идет просто вывод на экран содержимого вектора, и содержимого массива указателей для сравнения
        for (vector<string>::iterator str_it=str_vec.begin();str_it!=str_vec.end();++str_it)
        {
            cout << *str_it << endl; // с вектором тут все нормально
        }
        _getch();
                
 
        for (p_to_arr=p_arr;p_to_arr!=p_arr+str_vec.size();++p_to_arr)
        {
            
            cout << *p_to_arr << endl;   // а вот тут проблема: все элементы на которые указывают указатели 
// из массива указателей, являются последним элементом вектора, т.б. последней введенной строкой
        }
    _getch();
    return 0;
}
При вводе 3х строк:
qqq
www
eee

Ожидаемый результат:
qqq
www
eee
qqq
www
eee

Получаемый результат:
qqq
www
eee
eee
eee
eee

Более того при отсутствии циклов для проверки я сделал так. Перед выводом на экран содержимого массива указателей:
C++
1
2
s_temp="qqq";               //вообще я присвоил не напрямую, а как 1й элемент вектора, который был в тот момент равен "qqq"
p_arr[0]=s_temp.c_str();
И даже после этого все не так как надо. Все указатели из массива указателей стали указывать на "qqq".

Подскажите пожалуйста, где я ошибся.

Добавлено через 1 час 18 минут
Ошибку нашел. Объясните, пожалуйста, почему именно так.
Если заменить итератор на индекс все работает. Но хотелось бы разобраться с итераторами.
Т.б. если вместо
C++
1
2
3
4
5
 for (vector<string>::iterator str_it=str_vec.begin();str_it!=str_vec.end();++str_it, ++p_to_arr)
        {
                s_temp=*str_it;
                *p_to_arr=s_temp.c_str();
        }
Написать
C++
1
2
3
4
        for (string::size_type ind=0;ind!=str_vec.size();++ind, ++p_to_arr)
        {
                *p_to_arr=str_vec[ind].c_str();
        }
,
то все работает. Где я совершил ошибку при переделывании блока for под работу с итераторами?
А так же вместо -
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2013, 15:29
Ответы с готовыми решениями:

Вектор строк и массив указателей на тип char
Помогите, пожалуйста, с одной задачей. Сижу голову ломаю. Никак не могу понять почему эта ошибка выскакивает. Напишите программу,...

Напишите программу, присваивающую значения элементов списка указателей на символьные строки в стиле С (тип char* ) элементам вектора строк
Напишите программу, присваивающую значения элементов списка указателей на символьные строки в стиле С (тип char* ) элементам вектора строк...

Cоздать и заполнить массив строк в стиле Си (квадратную матрицу указателей на char)
Нужно создать массив символьных указателей на 10 элементов и выполните вывод всех строк в 10 столбиков Нужно заполнить массив...

19
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 15:49
C++
1
2
 s_temp=*str_it;
*p_to_arr=s_temp.c_str();
копирование из итератора в s_temp.
потом берется c_str и раздается всем. если размер s_temp не изменяется, то указатель, возвращаемый
c_str - тоже не меняется. ну и получается что всем раздается один и тот же указатель.
зачем копировать в s_temp? можно ведь сразу *p_to_arr = str_it->c_str();
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.12.2013, 15:57
Wlk, указывать внутрь вектора это плохо. Когда говорят, что вектор это массив имеют ввиду много общих черт, но только не постоянство размещения в памяти. Достаточно создать массив указателей на char:
C++
1
char *ptrs_to_c_str[];
размером вектор (size())
и пробежавшись по вектору повыделять память и скопировать в нее поэлементно и поустанавливать переменные массива на полученные строки char *.
1
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 16:22  [ТС]
*p_to_arr = str_it->c_str(); - вот это решило проблему. Неувязка в том, что по ходу изучения книги этот оператор еще не встречался.
Цитата Сообщение от DU Посмотреть сообщение
потом берется c_str и раздается всем. если размер s_temp не изменяется, то указатель, возвращаемый
c_str - тоже не меняется. ну и получается что всем раздается один и тот же указатель.
Вот тут не совсем понятно. У меня появилось следующее объяснение:
s_temp.c_str() - всегда указывает на одну и ту же область памяти, даже при том что данные хранимые в этой области могут меняться.
В моем представлении s_temp.c_str() при каждом новом изменении данных хранимых в s_temp должно генерировать указатель на другую область в памяти. Видимо это не так. Или я не прав?

Цитата Сообщение от IGPIGP Посмотреть сообщение
указывать внутрь вектора это плохо.
Цитата Сообщение от IGPIGP Посмотреть сообщение
и пробежавшись по вектору повыделять память и скопировать в нее поэлементно и поустанавливать переменные массива на полученные строки char *
Тут тоже не совсем понял. Насколько я понимаю, использовать итераторы для векторов и указатели для массивов - корректно. Или что вы имеете ввиду, конкретнее?

Спасибо.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 16:39
если размер буфера в строке не увеличивается (т.е. когда строка изменяется, но она умещается во внутренний буфер std::string), то перевыделять память нет особой нужды. она это и не делает. что в стандарте на этот счет написано - я не знаю. может там и нет гарантии, что это всегда так и закладываться на такую особенность не стоит. так же не стоит закладываться на то, что после изменения строки c_str вернет указатель на другой участок памяти.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.12.2013, 17:04
Цитата Сообщение от Wlk Посмотреть сообщение
Насколько я понимаю, использовать итераторы для векторов и указатели для массивов - корректно. Или что вы имеете ввиду, конкретнее?
Конечно корректно. Берём итератор и смотрим длину строки в нём. Выделяем память (+1). Устанавливаем на неё указатель из массива (очередной). Тут для обращения можно и без индекса, - арифметически. Потом копируем по указателю содержимое итератора.
DU, как я понимаю, для небольших или наперёд заданных векторов, это так и есть. Но если вектор не умещается в непрерывной области (перестал помещаться), то память может быть полностью перевыделена. Впрочем, это может быть реализовано по-разному.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 17:21  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Выделяем память (+1).
Вы имеете ввиду выделение памяти для символьного массива, в котором будет хранится строка+"\0", и потом установка указателя в массив?
Я это реализовал вот так:
C++
1
2
3
4
5
6
for (vector<string>::iterator str_it=str_vec.begin();str_it!=str_vec.end();++str_it,++p_to_arr)
          {        
        char *el = new char[str_it->size() + 1];
        strncpy(el, str_it->c_str(),str_it->size() + 1);
        *p_to_arr = el;
                  }
Только получается, что каждый раз создается новый массив с указателем el на первый элемент. И он фактически хранит только текущую строку в виде массива char.


И еще вопрос:
почему при использовании
C++
1
2
3
const char **p_to_arr=p_arr; // ok
........
*p_to_arr = str_it->c_str();   // ok
я могу производить запись в данные на которые указывает указатель. Он же указатель на константу? По моему представлению, он мог бы производить только считывание, но не запись.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 17:39
если указатель на константу - то он может сперва указывать на одну константу. потом на другу. это менять можно. это у вас и происходит. но вот значение этой константы через этот указатель поменять нельзя.

немного по проще (рассмотрим просто указатели, а не указатели на указатели).
есть четыре разных варианта:
1) int* ptr; // неконстантный указатель на неконстантую область памяти. менять можно все.
2) const int* cptr; // указатель на константу. можно указывать на разные константы, но значения этих констант менять через этот указатель нельзя (они же константы).
3) int* const ptrc; // указывает на одну и ту же область памяти. на другую указать нельзя. но значение этой области менять можно. т.е. этот указатель указывает на неконстанту.
4) const int* const cptrc = 0; // указывает на одну и ту же область памяти. на другую указать нельзя. и значение этой области через этот указатель менять нельзя. т.к. он указывает на константу.

добавте сюда еще указатели на указатели со всеми возможными вариантами константности и получится еще больше комбинаций
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.12.2013, 17:48
Цитата Сообщение от Wlk Посмотреть сообщение
Только получается, что каждый раз создается новый массив с указателем el на первый элемент.
Так Вы его и создаёте. Создайте массив указателей:
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
char *ptrs_to_c_str[];
размером вектор (size())
Потом каждый из указателей в массиве инициализируйте строкой итератора.
ps мне нравится Липман. Если не обращать внимание на багатство примеров, этого везде достаточно. Но задачи у него вполне приличные. Обратите внимание на 2) задания:
<<2) Скопируйте этот вектор в массив указателей на тип char. >>
Ехидство состоит в том, что говорится чаще всего так, а имеется в виду: по указателю.
И тут дело даже не в том, что указателю все равно на что он указывает. Кроме типа. Хотя и в этом тоже. Главное привыкнуть, что указатель хранит адрес, а значение лежит по этому адресу.
1
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 17:49  [ТС]
Цитата Сообщение от DU Посмотреть сообщение
немного по проще (рассмотрим просто указатели, а не указатели на указатели).
Так вот в том-то и вопрос. Мне казалось что, если указатель на указатель является константным (т.б. такой, что не может изменить то, на что он указывает, а указывает он именно на указатель(адрес константы)), то и менять то на что он указывает нельзя (т.б. нельзя менять значения указателя на константу (на который указывает указатель на указатель на константу)). А получается, что хоть указатель на указатель и является константным, его константность все равно распространяется только на доступ к значению константы, которая находится в конце этой длинной цепочки, а ко всем предыдущим звенам у него есть полный доступ на запись/считывание.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 18:02
есть еще трудности с терминами.
встречаются следующие варианты:
константный указатель - тут не совсем понятно о чем это
указатель на константу - тут все ок. зная это, предыдущий термин можно однозначно понимать так:
константный указатель - этот то, который всегда указывает в одну и ту же область памяти. указать на другую
запрещают правила с++ (константы инициализируются и больше не меняются).

если указатель на указатель является константным (т.б. такой, что не может изменить то, на что он указывает, а указывает он именно на указатель(адрес константы))
то, что описано в скобках - это свойства указателя на константу, а не константного указателя (как написано перед скобками).
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 18:13  [ТС]
Да, во всех случаях имел ввиду указатель на константу (т.е. указатель без привязки к области памяти но без доступа на запись объекта на который он указывает).
Т.б. если V -переменная, const int *Р=&V - указатель на переменную с доступом на считывание (указатель на константу),
То что такое const int **PP=&P - указатель на указатель на переменную с доступом на считывание (указатель на константу)? На что распространяется его ограничение доступа к записи? Только на конечную переменную V или и на адрес который в Р?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.12.2013, 18:44
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
#include <iostream>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;
int main(){
SetConsoleCP (1251); SetConsoleOutputCP (1251);
const int sz = 7;
char *source_c_str[] = {"Mama","мыла","Раму","Кришну", "Вишну", "вишню","раму"};//для простой инициализации массива. Дальше забудем о нём
////////////
vector<string> vec(source_c_str, source_c_str+sz);
//объявляем искомый массив указателей также как и source_c_str, а инициализирум позже:
char *output_c_str[sz];
vector<string>::iterator beg_it = vec.begin();
vector<string>::iterator end_it = vec.end();
int len_tmp=0;
int shift_in_output_c_str=0;
 
for(vector<string>::iterator it = beg_it; it != end_it; ++it){
    len_tmp=it->size()+1;
*(output_c_str+shift_in_output_c_str) = new char[len_tmp];
 
strcpy(*(output_c_str+shift_in_output_c_str), it->c_str());
shift_in_output_c_str++;
}
 
for(int i=0; i<sz; ++i)cout<<*(output_c_str+i)<<" ";
cout<<endl;
cout<<"Вернее:"<<endl;
cout<<*output_c_str<<" "<<*(output_c_str+1)<<" "<<*(output_c_str+6)<<"!"<<endl;
system("pause");
return 0;
}
Садистский с точки зрения синтаксиса примерчик. Как раз для укрепления духа.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 18:48  [ТС]
Очень даже хорошо. Но. Вы конечно, с формальной точки зрения обошли индексы, и пользовались только итераторами и указателями. Но фактически shift_in_output_c_str=0 - это индекс элемента массива.
Эквивалетно *output_c_str[shift_in_output_c_st].
Мне тоже намного легче с индексами работать. Но тогда мне никогда не понять указателей
У меня же использован указатель именно на текущий элемент массива, который рассматривается, и зная его не угадаешь, какой (какой по счету, с каким индексом) элемент массива под ним скрывается. Я даже не знаю хорошо это или плохо.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 18:52
const int **PP=&P - это неконстантный указатель на неконстантный указатель на const int.

с тайпдефами чуть легче это все воспринимается. вот надеюсь ничего не напутал.
используем тайпдефы + перегрузку и позволяем компилятору решить, что есть что и выдать нам результат:

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
 
typedef int* PtrToInt;
typedef const int* PtrToConstInt;
 
 
void Foo(PtrToInt*)
{
  std::cout << "PtrToInt*" << std::endl;
}
 
void Foo(PtrToConstInt*)
{
  std::cout << "PtrToConstInt*" << std::endl;
}
 
void Foo(const PtrToInt*)
{
  std::cout << "const PtrToInt*" << std::endl;
}
 
void Foo(const PtrToConstInt*)
{
  std::cout << "const PtrToConst*" << std::endl;
}
 
int main ()
{
  {
    int** p = 0;        // неконстантный указатель на неконстантный указатель на инт
    int** const pc = 0; // константный указатель на неконстантный указатель на инт
    Foo(p);
    Foo(pc);
 
    /*
    p = 0;      // ок.  p   - не константа
    *p = 0;     // ok.  p   - указывает на неконстанту
    *(*p) = 0;  // ok. (*p) - указывает на неконстанту
 
    //pc = 0;    // error. pс    - константа
    *pc = 0;     // ok.    pc    - указывает на неконстанту
    *(*pc) = 0;  // ok.    (*pc) - указывает на неконстанту
    */
  }
 
  {
    const int** p = 0;        // неконстантный указатель на неконстантный указатель на const int
    const int** const pc = 0; // константный указатель на неконстантный указатель на const int
    Foo(p);
    Foo(pc);
 
    /*
 
    p = 0;          // ок.     p   - не константа
    *p = 0;         // ok.     p   - указывает на неконстанту
    //*(*p) = 0;    // error. (*p) - указывает на константу
 
    //pc = 0;       // error.  pс   - константа
    *pc = 0;        // ok.     pc   - указывает на неконстанту
    //*(*cp) = 0;   // error. (*pc) - указывает наконстанту
 
    */
  }
 
  {
    int* const * p = 0;        // неконстантный указатель на константный указатель на инт
    int* const * const pc = 0; // константный указатель на константный указатель на инт
    Foo(p);
    Foo(pc);
 
    /*
    p = 0;      // ок.    p    - не константа
    //*p = 0;   // error. p    - указывает на константу
    *(*p) = 0;  // ok.    (*p) - указывает на неконстанту
 
    //pc = 0;    // error. pс    - константа
    //*pc = 0;   // ok.    pc    - указывает на константу
    *(*pc) = 0;  // error. (*pc) - указывает на неконстанту
    */
  }
 
  {
    const int* const * p = 0;        // неконстантный указатель на константный указатель на const int
    const int* const * const pc = 0; // константный указатель на константный указатель на const int
    Foo(p);
    Foo(pc);
 
    /*
    p = 0;        // ок.    p    - не константа
    //*p = 0;     // error. p    - указывает на константу
    //*(*p) = 0;  // error. (*p) - указывает на константу
 
    //pc = 0;    // error. pс    - константа
    //*pc = 0;   // error. pc    - указывает на константу
    //*(*pc) = 0;  // error. (*pc) - указывает на константу
    */
  }
 
  return 0;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.12.2013, 19:11
Цитата Сообщение от Wlk Посмотреть сообщение
shift_in_output_c_str=0 - это индекс элемента массива.
Это не индекс. Это счётчик. Чем-то же нужно итерировать. Это вполне стандартный подход к такого рода задачам. А индекс это то что в квадратных скобках.
Создайте семь указателей типа char *one, char *two... и сами поймёте, что показывать такое никому не нужно.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 19:28  [ТС]
C++
1
2
 78   //*pc = 0;   // ok.    pc    - указывает на константу
 79   *(*pc) = 0;  // error. (*pc) - указывает на неконстанту
Немного не понятно. Ошибка или правильно таки?

Я вроде понял (или мне так только кажется), но уже при очеееень медленном восприятия этого всего. А файлик сразу сохранил. Хорошая шпаргалка мне будет.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 20:09
строка раскоменчена. это компилится. т.е. там все ок. должно быть так:
*(*pc) = 0; // ок. (*pc) - указывает на неконстанту. значит менять можно.
наглючил при копипасте.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
15.12.2013, 20:25  [ТС]
Оно компилится да. Я имел ввиду так же что, если
Цитата Сообщение от DU Посмотреть сообщение
int* const * p = 0; // неконстантный указатель на константный указатель на инт
int* const * const pc = 0; // константный указатель на константный указатель на инт
C++
1
 //78 *pc = 0;   // ok.    pc    - указывает на константу
то в строке 78 тоже ошибка (в комментарии по крайней мере). Записать данные в константу нельзя же. Когдя буду пользоваться, как шпаргалкой, мне именно комментарии буду важны.
Ну насчет 79 строки вы пояснили.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
15.12.2013, 20:40
да, верно подмечено. там тоже камент кривой. меняем на:
C++
1
2
  int* const * const pc = 0; // константный указатель на константный указатель на инт
  //*pc = 0;   // error.  pc    - указывает на константу. менять нельзя
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2013, 20:40
Помогаю со студенческими работами здесь

Ввод строк и запись их в массив указателей
Мне надо считать определённое количество слов, это количество я должен ввести, потом каждое их эти слов записать в массив, как я понял это...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Массив указателей на массив строк и сортировка массива указателей
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

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

Запись строки char в массив char
Глупый вопрос, но что поделать, многое забыл... Хочу записть строку типа char в массив строк типа char, но выдает ошибку что...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru