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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 344
#1

Указатель на строковую константу - C++

07.09.2013, 20:28. Просмотров 1051. Ответов 23
Метки нет (Все метки)

Здравствуйте уважаемые форумчане!

Подскажите пожалуйста является ли эта ситуация выходом за пределы массива или размер массива автоматически подгоняется?:
C++
1
2
char * ptr = new char;
ptr = "I am massive";
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 20:28     Указатель на строковую константу
Посмотрите здесь:

Указатель на строковую константу - C++
Всем привет. Я знаю что в С++ в основном юзается std::string,но сишные строки тоже желательно знать. Вроде все просто, только функции...

Указатель на строковую константу. В чем отличие двух приведенных примеров - C++
char *x; x = "Текст"; это указатель на строковую константу. char x="Текст"; - строка(т.е. массив символов). В чём отличие...

Константный указатель на константу меняет значение - C++
int d = 7; const int* const cd = &d; d = 8; qDebug()<<*cd;

ссылка на указатель на константу. Не могу врубиться - C++
Добрый вечер! Не подскажите почему только выражение с pi_ref3 верное, а остальные - нет (VS 2013). Выражение с pi_ref1 вроде как-то...

Как объявить строковую переменную? - C++
которой в процессе выполнения программы будут присваиваться разные значения. Вот это: char* a = "VasiaPupkin"компилятор объявляет...

Не могу вывести строковую переменную - C++
Привет :) Писал программу, обнаружил что не могу вывести строковую переменную таким образом: int b=0; cin>>b; string a; if...

Как определить строковую переменную? - C++
Првиет всем! Ситуация такая.Мне нужно что бы введенная строка загрузилась в переменную.А далее эта переменная была переданна в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
07.09.2013, 20:36     Указатель на строковую константу #2
ptr - это вообще не массив, и он указывает на первый символ строки
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,081
Записей в блоге: 3
Завершенные тесты: 1
07.09.2013, 20:42     Указатель на строковую константу #3
Цитата Сообщение от BESSON_off Посмотреть сообщение
Подскажите пожалуйста является ли эта ситуация выходом за пределы массива или размер массива автоматически подгоняется?:
1) Вы выделили место под один символ.
2) Вы просто взяли и поменяли адрес, содержащийся в указателе.
3) Это утечка памяти
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 344
07.09.2013, 20:56  [ТС]     Указатель на строковую константу #4
Цитата Сообщение от Croessmah Посмотреть сообщение
Вы просто взяли и поменяли адрес, содержащийся в указателе
То есть строковая константа расположилась в стековой памяти?
Смысл этой записи аналог этому (утечка памяти опущена)?:
C++
1
2
3
char * ptr;
char mas[] = "I am massive";
ptr = mas;
fit
14 / 14 / 0
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 21:19     Указатель на строковую константу #5
строковая константа находится в оперативной памяти (heap), а переменная-указатель (ptr) таки да - в стековой.
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
07.09.2013, 21:20     Указатель на строковую константу #6
C++
1
2
3
4
5
6
char * ptr; /* ты создал указатель ptr, но память под него не выделил, он указывает ни на что, на NULL */
char mas[] = "I am massive"; /* ты создал массив mas */
ptr = mas; /* ты присвоил указателю ptr адрес массива mas, 
теперь если ты изменишь *ptr то изменится и mas, 
а если изменишь mas то изменится и *ptr т.к. это один и тот же объект, 
ну всмысле одно объект, а второе указатель на этот объект. */
fit
14 / 14 / 0
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 21:25     Указатель на строковую константу #7
не будет в общем никакой утечки, ты просто создал указатель на массив.
но при удалении массива его тоже надо будет удалить
C++
1
2
delete [] mas;
delete ptr;
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
07.09.2013, 21:30     Указатель на строковую константу #8
Цитата Сообщение от fit Посмотреть сообщение
но при удалении массива его тоже надо будет удалить
чего
ты хоть один new видел?
fit
14 / 14 / 0
Регистрация: 20.04.2010
Сообщений: 102
07.09.2013, 21:34     Указатель на строковую константу #9
Цитата Сообщение от ValeryS Посмотреть сообщение
чего
ты хоть один new видел?
лол, точно. спросоня с первым постом автора попутал))
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
07.09.2013, 21:59     Указатель на строковую константу #10
Цитата Сообщение от fit Посмотреть сообщение
лол, точно. спросоня с первым постом автора попутал))
да даже если попутал
удалять то нечего, он указатель потерял
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.09.2013, 22:00     Указатель на строковую константу #11
Цитата Сообщение от VLK Посмотреть сообщение
он указывает ни на что, на NULL
в указателе мусор, а не NULL
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
07.09.2013, 22:27     Указатель на строковую константу #12
Цитата Сообщение от Jupiter Посмотреть сообщение
в указателе мусор, а не NULL
тоже верно
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,081
Записей в блоге: 3
Завершенные тесты: 1
07.09.2013, 23:27     Указатель на строковую константу #13
Цитата Сообщение от fit Посмотреть сообщение
C++
1
delete [] mas;
Цитата Сообщение от fit Посмотреть сообщение
спросоня с первым постом автора попутал))
Цитата Сообщение от ValeryS Посмотреть сообщение
удалять то нечего, он указатель потерял
Да даже если бы не потерял, delete [] не прокатил бы.
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
08.09.2013, 00:29     Указатель на строковую константу #14
Цитата Сообщение от Croessmah Посмотреть сообщение
Да даже если бы не потерял, delete [] не прокатил бы.
то же правильно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2013, 01:04     Указатель на строковую константу
Еще ссылки по теме:

Текст итема предать в строковую переменную - C++
Есть главное окно(диалог), в нем listBox Как по нажатию пункта меню(обработчик его в файле MainApp.cpp) текст выделенного итема предать в...

Как в классе записать возвращаемую строковую переменную? - C++
как в классе записать возвращаемую строковую переменную? программа работает но ругается warning class_string.h #include...

Как добавить несколько символов в строковую переменную? - C++
как добавить несколько символов в строковую переменную?

Записать каждое слова текста в отдельную строковую переменную - C++
Приветствую. Есть n количество слов в тексте, разделены пробелом. Как можно записать каждое слово как массив в string? То есть...

Умножение вектора на константу - C++
Составить программу умножения вектора А на константу С.


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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.09.2013, 01:04     Указатель на строковую константу #15
Цитата Сообщение от fit Посмотреть сообщение
строковая константа находится в оперативной памяти (heap)
нет, как не крути это будет не хип, возможно стек, но скорее всего другая секция

C++
1
2
3
4
5
6
7
8
#include <cstdio>
 
const char* var = "hello world";
 
int main ()
{
    printf ("%s", var);
}
Bash
1
2
3
> g++ -g 4.cpp
> nm -a ./a.out| grep var
0000000000601028 D var
"D"
"d" The symbol is in the initialized data section.
Yandex
Объявления
08.09.2013, 01:04     Указатель на строковую константу
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru