Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разница между масивом и вектором 
:(
    Опции темы
bilbobagginz
Дата 19.1.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



Цитата

Строки в Си ограничены нулём. Поэтому ты спокойно можешь найти её конец.

не факт. на это полагаться никак нельзя. Нужно считывать кусочками, ессно величина кусочка (а др. словами кол-во вызовов read(), fgets() и т.п. ) зависит от задачи. 

а насчёт std::string
саша, пойми: только в Си char* примерно то же, что и char [] с т.з. реализации и занимаемого пространства (места). в Си++ там всё по-другому.






--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 19.1.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

в Си++ там всё по-другому.

 smile  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kirjanov
Дата 19.1.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

Репутация: 3
Всего: 15



вроде в C++ строка является объктом
PM MAIL   Вверх
bilbobagginz
Дата 19.1.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



MAKCim, 
я советую почитать Б.Страуструпа.
в Си++ классах есть много добавок ( относительно struct в Си ), напр vfptr, vbptr и т.д. и т.п.
посмотри раздел: Technicalities, Section B ( compatibility )

пока.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 19.1.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

MAKCim, 
я советую почитать Б.Страуструпа.

 smile 
Цитата(bilbobagginz @  19.1.2007,  15:44 Найти цитируемый пост)
только в Си char* примерно то же, что и char [] с т.з. реализации и занимаемого пространства (места). в Си++ там всё по-другому.

см. выделенное
char* и char[] в С++ по-другому реализуются?
уточнять надо, что речь о классах идет...

Добавлено @ 20:39 
Цитата

вроде в C++ строка является объктом 

опять уточнять надо, что имеется в виду: строка литералов ("bla-bla-bla") или объект класса строки (std :: string)

Это сообщение отредактировал(а) MAKCim - 19.1.2007, 20:37


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
admsasha
Дата 21.1.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Вот допустим я создаю

char* a;

как сделать 
strcat(a,"123");
strcat(a,"345");

и как применить форматированый вывод ?

?
PM MAIL WWW ICQ Jabber   Вверх
bilbobagginz
Дата 21.1.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



Код

char* a;

как сделать 
Код

strcat(a,"123");
strcat(a,"345");

и как применить форматированый вывод ?

ответ:
переменная-указатель - это как почтовый ящик. если он пустой, то он ничего с т.з. почты не значит, но с указателями ещё хуже: если его не "инициализировали", он может указывать либо на какой-то ненужный и неправильный (но валидный) адрес с какими-то нерелевантными данными, которые ты можешь принять за нужные, и напр. переписать той же командой:
Код

strcat(a,"123");

какую-то другую переменную,
либо, он может указывать на какой-то невалидный адрес, и обратившись к нему ты получаешь ошибку в доступе к памяти ( SIGSEGV ), и программа вылетает.

как решить ?
если ты используешь "просто-указатель", 
то указывать им ты должен либо на регион, который ты сам (напр. тут-же) аллоцируешь ( выделяешь ):
Код

char *a=malloc(10*sizeof(char));
/** проверяешь, что malloc() удался: */
if (NULL==a) {
/** ошибка */
}
/** нормальный ход программы, напр.: */
strcat(a,"123"); 


или же ты указываешь своим указателем на какой-то другой, валидный и правильный регион:
Код

char str[10]; /** система аллоцирует этот кусок для массива */
char *a=(str+2);  /** указываем на 3-й элемент в массиве ("строке") str */
/** теперь тоже можно сделать: */
strcat(a,"123");

и если обозначим неизвестно что значком "*", то в str будет:
Код

{ *,*,*,*,*,*'1','2','3',0};


загвоздка в том, что если ты в программе делаешь malloc(), то где-то надо освобождать это место при помощи free().

можно не освобождать, когда аллокация делается точное ограниченное число раз, тогда выходить надо с помощью exit(0);

судя по вопросам, тебе надо сначала прочитать книжку Б.Кернигана и Д.Ричи.



пока


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
admsasha
Дата 21.1.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



bilbobagginz, после твоего ответа теперь понял, что я вообще неправильно понимал, на счет char*, я пологал что это значит что могу пихать туда неограничено объема, а char[10] только 10знаков.


PM MAIL WWW ICQ Jabber   Вверх
bilbobagginz
Дата 21.1.2007, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



Цитата

bilbobagginz, после твоего ответа теперь понял, что я вообще неправильно понимал, на счет char*, я пологал что это значит что могу пихать туда неограничено объема, а char[10] только 10знаков.


это уже смотря куда ты им будешь указывать.

Есть ещё один пример с использованием указателей - в общих вопросах была тема с удалением лишних пробелов, где Dov показал человеку элементарную арифметику указателей.

всё-таки книга "Язык программирования Си" от авторов  Брайан Керниган, Денис Ричи, т.н. "Библия Си" - хорошая и полезная книга: полный справочник и есть примеры, показывающие всё что стоит. И вообще пройдёт 5 лет после твоего последнего проекта на Си, перейдёшь ты на Си++ или другой язык - очень полезно, чтобы материал был под рукой.

То же относится и к "Язык программирования Си++" от Бьярна Страуструпа ( бери самое последнее издание)

а также в последствии ( если на Си++ перейдёшь ), то приобрети "Шаблоны Планирования" ( Design Patterns )
пока.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
powerfox
Дата 21.1.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 5
Всего: 97



Цитата(bilbobagginz @  21.1.2007,  21:41 Найти цитируемый пост)
Есть ещё один пример с использованием указателей - в общих вопросах была тема с удалением лишних пробелов, где Dov показал человеку элементарную арифметику указателей.

bilbobagginz, единственно, если бы 1 строка создавалась и удалялась через new и delete smile) Совсем уж законченный был бы пример.


--------------------
user posted image
PM WWW   Вверх
admsasha
Дата 22.1.2007, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: 1
Всего: 6



Цитата(bilbobagginz @  22.1.2007,  03:41 Найти цитируемый пост)
а также в последствии ( если на Си++ перейдёшь ), 

Я про C++ и спрашивал  smile 
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.