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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2009, 18:55   #1
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию Вопрос по char*

Всем привет.

А допустимо ли так вводить с клавы строковый литерал?
Кусок кода в main():

char*str; // str содержит случайный адрес ?
cin >> str; //

Последний раз редактировалось and277; 11.10.2009 в 18:58.
and277 вне форума Ответить с цитированием
Старый 11.10.2009, 18:59   #2
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

ты нигде не отводишь память под этот символ и писаться он будет неизвестно куда, что ни есть хорошо
Nitrino вне форума Ответить с цитированием
Старый 11.10.2009, 19:26   #3
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Код:
int main()
{
char * str;
char a;
str = &a;
cin>>*str;
cout<<*str<<endl;
}
Cpluser вне форума Ответить с цитированием
Старый 11.10.2009, 19:30   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
Код:
int main()
{
char * str;
char a;
str = &a;
cin>>*str;
cout<<*str<<endl;
}
Только следует оговорить, что в данном случае нельзя читать больше одного символа. да и вообще какой смысл использовать указатель, если мы его везде разыменовываем

Код:
int main()
{
     char str[80]; // str - в данном случае указатель на блок памяти, в 80 байт
     cin >> str;
     cout << str << endl;

     return 0;
}
netrino вне форума Ответить с цитированием
Старый 11.10.2009, 20:07   #5
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение

Код:
int main()
{
     char str[80]; // str - в данном случае указатель на блок памяти, в 80 байт
     cin >> str;
     cout << str << endl;

     return 0;
}
Да, спасибо всем за ответы.

А если так?

Код:
int main()
{
     char* str; // случайный адрес
     str = new char[80];
     cin >> str;
     cout << str << endl;

     delete []str;//стоит очищать память тут?

     return 0;
}

Последний раз редактировалось and277; 11.10.2009 в 20:09.
and277 вне форума Ответить с цитированием
Старый 11.10.2009, 20:10   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от and277 Посмотреть сообщение
А если так?

Код:
int main()
{
     char* str; // случайный адрес
     str = new char[80]; // А теперь не случайный! :))
     cin >> str;
     cout << str << endl;

     delete []str; // Ещё как стоит :) Это должно стать железной привычкой

     return 0;
}
Словом, куда попало читать нельзя, получите AV на современных системах, или же чего похуже на старых
netrino вне форума Ответить с цитированием
Старый 11.10.2009, 20:26   #7
and277
Пользователь
 
Регистрация: 07.03.2008
Сообщений: 31
По умолчанию

netrino Спасибо.

Я правильно понял - Если я не буду использовать опер delete, то по завершении программы, будут удален указатель str. Но память 80 байт освобождена не будет? Если это так - кто её освободит и когда? ОС?

Последний раз редактировалось and277; 11.10.2009 в 20:28.
and277 вне форума Ответить с цитированием
Старый 11.10.2009, 20:39   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от and277 Посмотреть сообщение
netrino Спасибо.

Я правильно понял - Если я не буду использовать опер delete, то по завершении программы, будут удален указатель str. Но память 80 байт освобождена не будет? Если это так - кто её освободит и когда? ОС?
Да, ОС должна будет это сделать.
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка cannot convert from 'char *' to 'char [100]' Stellvertreter Общие вопросы C/C++ 5 30.05.2010 00:02
FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); } lebedun Общие вопросы C/C++ 3 27.03.2009 03:43
String и Char Volt Общие вопросы Delphi 3 17.02.2009 08:30
отличие char* str ="..." от char ...[]="..." StarWorm Общие вопросы C/C++ 2 20.11.2008 08:48
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17