Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 22:45   #1
virtuhay266
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 57
По умолчанию Выделение памяти для строк

Всем привет!
Интересует один вопрос: сколько нужно выделять памяти под строку - по количеству символов в строке или +1 для NULL в конце, и сколько байт скопируется вот сдесь ->
Код:
char *p=(char *) malloc (3);
strcpy(p,"-o");
два или три, и если два, то нужно ли ручками вбивать NULL?
Зарание спасибо!
virtuhay266 вне форума Ответить с цитированием
Старый 05.12.2011, 23:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

+1 для терминального нуля.

копируется три символа.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.12.2011, 23:39   #3
virtuhay266
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 57
По умолчанию

То есть
Код:
strcpy(p,"-o");
и
Код:
strcpy(p,"-o\0");
эквивалентны?
virtuhay266 вне форума Ответить с цитированием
Старый 05.12.2011, 23:46   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

строковой литерал заключенный в двойне кавычки автоматически дополняется терминальным нулем, в отличие от литерала в одиночных.

во втором случае под литерал может быть выделено 4-байта(хотя поидее изза выравнивания так и так будет 4).
но коды делают одно и тоже, ибо strcpy ищет первый терминал, не более.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 05.12.2011 в 23:57.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.12.2011, 23:52   #5
virtuhay266
Пользователь
 
Регистрация: 28.05.2009
Сообщений: 57
По умолчанию

Спасибо! Теперь я все понял.
virtuhay266 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение диапазона адресов для окна памяти платы ISA Veri Общие вопросы C/C++ 1 27.09.2011 14:20
Выделение памяти (new) ImmortalAlexSan Общие вопросы C/C++ 20 05.06.2011 23:39
Выделение памяти в С++ Dj-IIyIIc Общие вопросы C/C++ 4 18.10.2010 14:39
выделение памяти Артем1256 Общие вопросы C/C++ 1 13.11.2009 16:38
Выделение памяти в функции для переданных параметров LinuxUser Общие вопросы C/C++ 1 12.11.2007 19:21