Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 07.05.2015
Сообщений: 79
1

Указатели при работе со строками char*

18.12.2015, 00:36. Показов 1369. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться с указателями
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
#include <iostream> 
#include <string.h>
using namespace std;
 
 
int main()
{
    char* symbol = new char[0];///пямяти только на один символ
    gets(symbol);//почему запоминает больше 1 символа должен же один 
    /*****************/
    for (int i = 0; i < strlen(symbol); i++)
    {
        cout << *(symbol+i);//виводит все символы что я записал
    }
    /****************/
    int *a = new int;
    *a = 5;
    cout << 5 << endl;
    delete a;
    cout <<"Значения инт после удаления:"<<*a << endl;
    *a = 5;
    //*(a + 1) = 5;
    cout << "изменили значение и: " << *a << endl;//работает немного криво но работает! а хотя не должно по скольку  удалил её
 
    return system("pause"); 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2015, 00:36
Ответы с готовыми решениями:

Ошибки при работе со строками char*
Здравствуйте. Помогите пожалуйста найти ошибку, ато я что-то ослеп(( #include &lt;fstream.h&gt;...

Ошибка при работе со строками
Привет! Имеется простой файл index html, в котором 2 поля и кнопка, для передачи параметров. ...

Ошибка при работе со строками
Доброго времени суток! Казалось бы, простая проблема, но разобраться пока что никак не удаётся....

Ошибка при работе со строками
Добрый день! Я писал программу, которая после приставки под вставляет символ 'Ъ'. Я её написал, но...

8
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 00:47 2
Цитата Сообщение от Restomix Посмотреть сообщение
gets(symbol);//почему запоминает больше 1 символа должен же один
Память вообще не выделена (нулевой размер). Но выход за границу выделенной памяти - это UB, может работать, может вылететь при работе.

Добавлено через 3 минуты
Попробуй строку подлиннее ввести.
0
2 / 2 / 0
Регистрация: 07.05.2015
Сообщений: 79
18.12.2015, 00:51  [ТС] 3
C++
1
char* symbol = new char[0];
не эквивалентно
C++
1
char* symbol = new char;
?
и к тому же какая граница тогда? если памяти нету.при очень больших строках ошибка Malloc.h ругается но все же выводит все что я написал, значит запомнило и изменило.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
18.12.2015, 00:53 4
C++
1
char* symbol = new char[1];
"эквивалентно"
C++
1
char* symbol = new char;
1
2 / 2 / 0
Регистрация: 07.05.2015
Сообщений: 79
18.12.2015, 00:57  [ТС] 5
да Вы правы, моя ошибка.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 01:04 6
Цитата Сообщение от Restomix Посмотреть сообщение
и к тому же какая граница тогда?
Нет никакой границы. Компилятор это не отслеживает, при работе UB.
0
2 / 2 / 0
Регистрация: 07.05.2015
Сообщений: 79
18.12.2015, 01:11  [ТС] 7
получается память не выделяется но в памяти сохраняется.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 01:33 8
Цитата Сообщение от Restomix Посмотреть сообщение
получается память не выделяется но в памяти сохраняется.
И что? Может сохраниться, может не сохраниться, может работать, может не работать. Что такое UB знаешь? Ты что хочешь услышать?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
18.12.2015, 01:36 9
Лучший ответ Сообщение было отмечено Restomix как решение

Решение

Цитата Сообщение от Restomix Посмотреть сообщение
получается память не выделяется но в памяти сохраняется.
получается просто указатель, под который выделено 0 байтов памяти, т.е. не выделено ничего.

C++
1
2
char* symbol; //Есть указатель
    *symbol='x'; //Но он не обязательно владеет захваченным участком памяти
. Любое обращение к Не захваченной еще памяти влечет UB.

C++
1
char*pch = new char[0];
Память выделяется для указателя pch (не new выделяет), но не для области, на которую он указывает (new тут так, мимо проходило). А указатели всегда куда-то указывают. Получается лотерея, когда указатель или показывает на захваченный участок или указывает на еще не захваченный участок памяти.
1
18.12.2015, 01:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2015, 01:36
Помогаю со студенческими работами здесь

Ошибки при работе со строками
Доброго времени суток! Есть такой код #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt;...

Ошибка при работе со строками
Не пойму, как именно работают ф-ии gets и puts. На gets программа просто вылетает. #include...

Проблема при работе со строками
Добрый день. проблема состоит в том, что вс не может определить иден i в строке 23. Как это решить?...

Баг при работе с строками
При использовании функции ChangeNum к уже существующему номеру (пункт меню &quot;работа с одним...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru