|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.07.2009, 00:26 | #1 |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Вопрос по строкам (Visual c++)
Здраствуйте, я подошел к концу Главы "строки / разбор текста " и у меня возник вопрос.
Какое из следующих объявлений лучше всего использовать?(Ведь они примерно одинаковые). char *s; string s; char s[]; |
23.07.2009, 00:53 | #2 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
смотря где и когда что использовать.
char *s = "123"; - указатель на константную строку (изменить ее будет нельзя). string s; - класс строки. удобно использовать конкатенацию, поиск и тп, но к примеру, в файл ты такой тип строки просто так не запишешь, надо делать сериализацию (в любой момент можно получить СИ строку методом c_str()) char s[] - строка, представлена ввиде массива. грубо говоря, то же самое, что и первый вариант, только данные можно изменить
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
23.07.2009, 01:32 | #3 | ||
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Цитата:
Цитата:
Если взять этот пример char *s = "123"; то я понимаю его так. Это строка "говорит": присвоить тому на что указывает данный указатель строку "123", но так как у этого указателя нет адреса массива типа char (адреса первого элемента), то куда он "девает/засовывает" строку "123" и на что он указывает если у него нет никакого адреса. Буду очень признателен если вы сможете мне это объяснить. |
||
23.07.2009, 01:46 | #4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Не совсем верно, char *s = "123"; На этапе компиляции размещает в Вашей программе строку "123"(в области данных), а затем присваивает переменной s указатель на эту строку.
Для работы со строками(модификация, конкатенация, поиск) я бы всё же советовал использовать string, так как для этого он, как и остальная часть стандартной библиотеки, и создавался. |
23.07.2009, 01:48 | #5 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Если с файлами работать, то имхо лучше память динамически выделять. То есть:
Код:
Код:
стринги - специальный класс строк. Имеет довольно удобные функции. Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
23.07.2009, 01:54 | #6 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Цитата:
Код:
|
|
23.07.2009, 02:07 | #7 | ||
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Цитата:
Цитата:
1)На этапе компиляции размещает в Вашей программе строку "123"(в области данных) 2)char s; 3)char *s = &s; 4)*s = "123"; p.s Извините за шквал вопросов, просто хочу разобраться с этим. |
||
23.07.2009, 02:10 | #8 |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Хмм... У меня в книге написано что в данном случае char s[] компилятор сам выберет размер массива, и он выделит памяти не больше не меньше чем нужно.
|
23.07.2009, 03:19 | #9 | ||
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
2)char *s = указатель на "123" Цитата:
Код:
|
||
23.07.2009, 03:53 | #10 | |
Форумчанин
Регистрация: 21.04.2008
Сообщений: 164
|
Цитата:
Но насчет этого как то не до конца понимаю 1)На этапе компиляции размещает в Вашей программе строку "123"(в области данных) - понятно. 2)char *s = указатель на "123" - Это указатель на область/сегмент памяти, или на первый элемент? |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопрос по строкам в паскале | NEMO1991 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 07.06.2009 13:14 |
Народ,зацените!Вопрос по строкам с++ | Познающий | Общие вопросы C/C++ | 32 | 12.05.2009 20:16 |
вопрос по строкам | CraZZy RabbIt | Общие вопросы Delphi | 4 | 21.04.2009 19:00 |
Вопрос по Visual Basic 6. | С.М.С | Помощь студентам | 7 | 08.03.2009 13:51 |
Вопрос по Visual C++ | TheLostOne | Visual C++ | 4 | 12.02.2009 00:23 |