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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
#1

Вопрос о строках. - C++

12.08.2009, 19:14. Просмотров 1250. Ответов 20
Метки нет (Все метки)

Здравствуйте, все.

Талдычу строки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main() {
 
    char * pstr1="tes"; 
    short offset=strlen(pstr1)+1;
    
    pstr1="wxyz";
    for(offset*=-1;offset<(short)strlen(pstr1);offset++){
        cout<<"pstr1["<<offset<<"]=="<<*(pstr1+offset)<<endl;
    }
    return 0;
}
вывод
pstr1[-4]==t
pstr1[-3]==e
pstr1[-2]==s
pstr1[-1]==
pstr1[0]==w
pstr1[1]==x
pstr1[2]==y
pstr1[3]==z

Получается, что если присвоить указателю на символ новую строку, то выделятется новый кусок памяти(см. вывод).
Вопрос 1.
Нужно ли заботиться о уплывших байтах? Что-то подсказыватет, что надо.
Вопрос 2.
Если нужно, то подскажите как правильно все сделать.

Спасибо заранее читающим || отвечающим.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2009, 19:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос о строках. (C++):

проясните вопрос в строках - C++
вот программа с объявлениями строк как тип стринг и как массив #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;string&quot; ...

Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию в нечетных строках массива и по убыванию в четных строках. - C++
Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию в нечетных строках массива и по убыванию в четных...

Элементы, расположеные на главной диагонали, в первых 3 строках выше диагонали и в последних 2 строках ниже диагонали переместить в одномерный массив - C++
Нужно элементы расположены на главной диагонали, в первых 3 строках выше диагонали и в последних 2 строках ниже диагонали переместить в...

Вопрос по массивав, "институтский" вопрос. - C++
Готовлюсь к летней сессии по программированию. С++ Есть такая вот задачка (привожу как есть) В документации подобного не...

о строках - C++
вопрос по поводу строк. я хочу в cout выводить русские символы и какие нибудь строки на русском. например string a; ...

Функция в строках - C++
Здравствуйте, помогите пожалуйста с функцией. Где-то что-то я не понимаю по функциям.. Есть строка которая при обработке функцией...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
13.08.2009, 20:42  [ТС] #16
Цитата Сообщение от novi4ok Посмотреть сообщение
правильно.

"еще где-то". в области констатн. проще выражаясь, они будут являться частью тела вашего скомпилированного модуля.
Похоже что так и есть.
C++
1
2
char * pstr1="tes";
for(int i=0;i<2;i++) *(pstr1+i)=char(i+65); pstr1[2]='\0';
Вылетает с ошибкой.

Прочитал - есть 5 областей. Мож кому интересно будет.
1. область глоб.перем. - хранятся глобальные переменные.
2. динамическая - создается/уничтожается new/delete.
3. регистровая память (хранятся вершина пресловутого стека,адрес команды...)
4. сегменты программы - программный код.
5. стековая память(Пресловутая )

Если пойти методом от противного то получается, что если объявить
C++
1
char * pstr1="tes";
то pstr1 попадет в стековую память, а сама строка "tes" в сегменты программы.
Поправьте.

Спасибо всем.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
13.08.2009, 20:55 #17
Не в сегмент программы, а в read-only область данных программы (где хранятся все константы, строки).
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
13.08.2009, 22:19 #18
Если говорить о Win32-программе, в ней все инициализированные константы, и, в частности, строковые литералы (а упомянутый "tes" - это именно строковый литерал, а не строка!) размещаются в специальной секции PE-модуля с именем .rdata - read-only data. Хотя, зависит от компилятора, - компилятор от Борланда любит размещать такие константы прямо в секции .code - которая, разумеется, тоже read-only
Устройство эльф-модуля из никсов я подробно не копал, но, думаю, будет то же самое.
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
13.08.2009, 22:29  [ТС] #19
Цитата Сообщение от odip Посмотреть сообщение
Не в сегмент программы, а в read-only область данных программы (где хранятся все константы, строки).
odip,CheshireCat , если Вас не затруднит - киньте ссылкой или скажите где почитать про эти чуднЫе области памяти, Потому как в той книге, что я читаю, - я нашел упоминание только о тех областях, которые я запостил в предыдущем сообщении.

Спасибо заранее.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
13.08.2009, 23:18 #20
Например, вот: http://www.rsdn.ru/article/baseserv/pe_coff.xml
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
14.08.2009, 09:30  [ТС] #21
Шнимаю шляпу :-), почитаю намедни.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2009, 09:30
Привет! Вот еще темы с ответами:

Работа в строках - C++
Очень нужна помощь! Ввести строку. Вывести в виде нескольких строк так, чтобы в каждой строке было по 4 слова, первое слово начиналось...

Предложения в строках - C++
Просидел 2 часа и не смог догнать, как реализовать задачу.Решил обратиться к умеющим за помощью. Задача: Написать программу, которая...

Мусор в строках - C++
Привет всем!!! Я пишу помехоустойчивый декодер Витерби. Имеется граф 4x32. struct graf { int rebro0; int rebro1; ...

Поиск в строках - C++
Помогите пожалуйста найти самое короткое слово в предложении из всех слов с длиной не менее 4 символов.


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

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

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