Другие языки программирования и технологии
c++ возврат char из функции
Пожалуйста помогите привести в рабочему виду ...или как правильно возвращать указатель(ссылку на память) на char из функции?? ====== #include<iostream> using namespace std; char * func() { char g[]={'А','G'}; return &g[0]; } int main(int argc,char * argv[]) { cout << func() << endl; }
Два замечания.
(1) Ваша программа будет иметь неопределённое поведение, потому что возвращать из функции указатель на локальную переменную нельзя. После выхода из функции участок памяти, занятый локальной переменной, освобождается и может быть использован системой для чего угодно. Если Вам повезёт и система ещё не успеет переиспользовать этот участок памяти, то Вы даже можете получить правильные результаты. Но полагаться на это нельзя. Если Вы уж обязательно хотите вернуть из функции char *, то надо внутри функции аллокировать память с помощью оператора new (ну или malloc, если в С) . Пример Вам привёл DarkLostSoul.
(2) Сама идея возвращения char * из функции совершенно не соответствует духу С++. Это штучки из С. В С++ надо избегать манипуляций низкого уровня, к котором относятся и манипуляции с char *. Вместо этого надо работать с std::string, классом, который для того и создан, чтобы облегчить жизнь и избежать многочисленных ошибок (вроде Вашей) , которые так легко сделать в низкоуровневых операциях.
(1) Ваша программа будет иметь неопределённое поведение, потому что возвращать из функции указатель на локальную переменную нельзя. После выхода из функции участок памяти, занятый локальной переменной, освобождается и может быть использован системой для чего угодно. Если Вам повезёт и система ещё не успеет переиспользовать этот участок памяти, то Вы даже можете получить правильные результаты. Но полагаться на это нельзя. Если Вы уж обязательно хотите вернуть из функции char *, то надо внутри функции аллокировать память с помощью оператора new (ну или malloc, если в С) . Пример Вам привёл DarkLostSoul.
(2) Сама идея возвращения char * из функции совершенно не соответствует духу С++. Это штучки из С. В С++ надо избегать манипуляций низкого уровня, к котором относятся и манипуляции с char *. Вместо этого надо работать с std::string, классом, который для того и создан, чтобы облегчить жизнь и избежать многочисленных ошибок (вроде Вашей) , которые так легко сделать в низкоуровневых операциях.
Это вариант "втупую":
char* func()
{
char* str = new char[10];
sprintf(str, "%s","ABC");
return str;
}
char* func()
{
char* str = new char[10];
sprintf(str, "%s","ABC");
return str;
}
Павел Бородин
Этот "тупой" вариант - вызывает утечку памяти!!! Не пользуйтесь им!!!
#include < iostream >
using namespace std;
char *func()
{
char arr[]={'a','b','c'};
return arr+1;
//return &arr[1]; //и так можно
}
int main()
{
cout < < *func() < < endl; //нужно разыменовывать *
return 0;
}
using namespace std;
char *func()
{
char arr[]={'a','b','c'};
return arr+1;
//return &arr[1]; //и так можно
}
int main()
{
cout < < *func() < < endl; //нужно разыменовывать *
return 0;
}
насколько помню ссылку с массивами использовать нельзя, попробуй указатель
Похожие вопросы
- C++, вывод char в file.
- не очень сложная прога на c++ не робит: Написать функцию, сравнивающую площадь двух треугольников, по координатам их вер
- DEV C++ отсутствуют некоторые НУЖНЫЕ функции
- Возврат нескольких значений функции
- C++ Win32 API Какой функцией получить открытые в текущий момент окна?
- Вывести название массива с помощью char, C++
- [C++] char && char* && char[ ]
- Вопрос для тех кто знает точный ответ, язык C про функции все подробности вопроса внутри...
- что такое var c: char; в паскале? что такое var c: char; в паскале?
- с++ внутри. Как из int преобразовать в char и *char и обратно. И есть ли аналог функций switch(a) где a не char a int?