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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2011, 16:08   #1
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию const char * str

Почему у меня в функциях строки должны быть обязательно const.

Например:int replace(char * str, char c1, char c2);
Пишет ошибку: file24.cpp:8: warning: deprecated conversion from string constant to ‘char*’
А если переделать так: int replace(const char * str, char c1, char c2);, то всё правильно!
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 12.09.2011, 16:15   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Пишет ошибку
и где там ошибка? это лишь предупреждение.
связано предупреждение с тем что в компилятор встроенна поддержка std::string, потому символьные литералы считаются либо const char*, либо как std::string, хотя и есть автоприведение к char*, но оно считается устаревшим.

кстати, интересный вопрос к знающим, const char*, это константный указатель или все-таки указатель на константные данные?(или и то и то?)
мне почему то кажется что и то и то, и тогда верно все складывается, для функций оно означает что они не именяют данные переданные через указатель.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 16:15   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от ser70 Посмотреть сообщение
Почему у меня в функциях строки должны быть обязательно const.

Например:int replace(char * str, char c1, char c2);
Пишет ошибку: file24.cpp:8: warning: deprecated conversion from string constant to ‘char*’
А если переделать так: int replace(const char * str, char c1, char c2);, то всё правильно!
А почему нет?

p.s. вопрос смешной

UPD:
Цитата:
кстати, интересный вопрос к знающим, const char*, это константный указатель или все-таки указатель на константные данные?(или и то и то?)
мне почему то кажется что и то и то, и тогда верно все складывается, для функций оно означает что они не именяют данные переданные через указатель.
все да, только не на константные данные.
BOBAH13 вне форума Ответить с цитированием
Старый 12.09.2011, 16:20   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну я имел в виду, что данные по такому указателю нельзя менять.
я прав?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 16:25   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
const char *
константные данные


Код:
char * const
константный указатель
f.hump вне форума Ответить с цитированием
Старый 12.09.2011, 16:26   #6
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ну да, вродь даж в К&R написано что читать такие шутки надо справа налево
const char * s указатель на константу
char * const s константный указатель (почти как ссылка)
onewho вне форума Ответить с цитированием
Старый 12.09.2011, 16:29   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я просто не читал, а сейчас голова ппц, потому решил спросить между делом.
спасибо за ответы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.09.2011, 19:55   #8
mikillskegg
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я просто не читал, а сейчас голова ппц, потому решил спросить между делом.
спасибо за ответы.
Однако, классику надо читать.
mikillskegg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
'int' в 'const char *' frommars Visual C++ 5 05.07.2011 19:24
'unsigned char [512]' в 'const char *' frommars Visual C++ 8 02.07.2011 13:37
Ошибка Could not find a match for 'Pos(TStringStream *,const char *)' bulldog5293 C/C++ Сетевое программирование 1 09.04.2011 12:19
преобразование типов char-const char student101 Помощь студентам 8 01.12.2010 20:45
Конвертирование из const char*(System::String) в LPCWSTR Eros Общие вопросы .NET 1 27.05.2010 12:36