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

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

Войти
Регистрация
Восстановить пароль
 
ктумфен
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 18
#1

Строки в стиле С - C++

13.06.2014, 22:34. Просмотров 454. Ответов 9
Метки нет (Все метки)

Здравствуйте, задумался над одной штукой:
можно ли просто написать
C++
1
char* s = "stirng";
или же нужно
C++
1
const char* s = "string";
я имею ввиду: если выбрать первый вариант, есть ли вероятность что область памяти следующая за s будет использована, ведь я не выделял для s память.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2014, 22:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки в стиле С (C++):

Строки в стиле C - C++
Добрый вечер, решил поковыряться со строками в стиле C и наткнулся на следующую проблему. В 13-й строке компилятор ругается на то, что...

Строки в стиле C - C++
Начал изучать C++, столкнулся с проблемой. Пользователь вводит строку, нужно вывести все возможные комбинации слов из введенной...

Строки в стиле C. Часть 2 - C++
Еще раз спасибо, что помогли разобраться с вводом и чтением строк в стиле C. Появился иной вопрос - есть массив со строками в стиле C,...

Реверс строки в стиле Си - C++
Подскажите как написать собственную функцию реверса строки в стиле СИ?

строки в стиле С - cstdlib - C++
Добрый вечер) Изучаю функции, связанные со строками. Конкретно по функциям, содержащимся в заголовке <cstdlib> Библиотеку С++ смотрю вот...

Строки в стиле Си. Замена символов - C++
Дана строка символов. Преобразовать данную строку, удалив из нее каждую пару символов ‘<<’ и повторив (вставив еще раз) каждую пару...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
13.06.2014, 22:40 #2
Если s не изменяется в программе, используй второй вариант. Хотя и первый будет работать.
0
ктумфен
13.06.2014, 22:53  [ТС]
  #3

Не по теме:

при объявлении например:

C++
1
int x;
что записывает в память? ОС? компилятор? и при использовании new кто занимается выделением памяти?

0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 23:03 #4
Цитата Сообщение от ктумфен Посмотреть сообщение
или же нужно
Так правильней.
0
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
13.06.2014, 23:07 #5
есть ли вероятность что область памяти следующая за s будет использована, ведь я не выделял для s память.
Если я не ошибаюсь, "string" попадёт в статическую память, и сама s будет указывать на неё.

что записывает в память? ОС? компилятор? и при использовании new кто занимается выделением памяти?
Память в любом случае выделяется, разница только где: в куче или стеке.

Добавлено через 1 минуту
есть ли вероятность что область памяти следующая за s будет использована
s это указатель.
1
ктумфен
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 18
13.06.2014, 23:14  [ТС] #6
kvadro, если выделится в стек, значит ОС (или что там выделяет память) не будет использовать эту область памяти для , например объявления новых переменных?
0
Убежденный
Системный программист
Эксперт С++
15550 / 7058 / 1114
Регистрация: 02.05.2013
Сообщений: 11,468
Завершенные тесты: 1
13.06.2014, 23:34 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ктумфен, строковые литералы, во-первых, константны, то есть,
их нельзя изменять (read-only), а во-вторых, они имеют статическое время жизни,
т.е. доступны в любой момент выполнения программы. Оба эти пункта определены
стандартом языка.
1
Renji
1916 / 1314 / 298
Регистрация: 05.06.2014
Сообщений: 3,757
13.06.2014, 23:39 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
что записывает в память? ОС? компилятор?
Не в память (скорее всего, в регистры), не ОС и не записывает. Выделение/освобождение памяти под локальные переменные выполняется на уровне процессора.
и при использовании new кто занимается выделением памяти?
void*operator new(size_t); Но вам пока рановато волноваться о содержимом его потрохов.
1
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
14.06.2014, 01:03 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
и при использовании new кто занимается выделением памяти?
Всё является более высокоуровневой прослойкой VirtualAlloc, которая в свою очередь управляется OS.
1
ктумфен
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 18
14.06.2014, 08:08  [ТС] #10
всем спасибо, просто развеяли туман)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2014, 08:08
Привет! Вот еще темы с ответами:

Динамическое выделение памяти под строки в стиле Си - C++
В программе пользователь вводит строку неизвестного заранее размера. Ее нужно передать в функцию для работы с ней. Как это оформить на c++?...

Инициализация поля класса (строки в стиле Си): найти причину возникновения ошибки и исправить эту ошибку - C++
Начинаю учить C++ и хочу сделать что-то типо "игры" в текстовом варианте. Вот столкнулся с проблемой - хранение бонусов при ответе,...

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

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.06.2014, 08:08
Ответ Создать тему
Опции темы

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