Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
#1

Возврат строки из функции по указателю - C++

09.05.2011, 20:34. Просмотров 4727. Ответов 8
Метки нет (Все метки)

Здравствуйте. Обьясните пожалуйсто, почему компилятор выдает предупреждение при выполнении следующего кода и почему строка возвращается не полностью ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "windows.h"
#include <iostream>
using namespace std;
 
char *func()
{
    char arr[10]="stro4ka";
    return arr;
}
 
int main()
{
 
char *arr=func();
cout<<arr;//выводит только st вместо stro4ka
 return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 20:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возврат строки из функции по указателю (C++):

Возврат строки из функции - C++
Здравствуйте. Пишу программу для работы с процессами, мне нужно, чтобы в функцию передавался PID, а возвращалось имя, но выводятся...

Возврат строки из функции - C++
//char perfomers; //char _perfomers; char GetPerfomers(){strcpy(_perfomers,perfomers);return *_perfomers;} Есть у меня такая...

Удаление строки по указателю - C++
Прошу прощения за столь глупый вопрос: как удалить строку по указателю. Т.е. char *s = new char; strcpy( s, &quot;blablabla&quot; ); ... ...

Возврат 2 значений из функции с одним вызовом этой же функции - C++
Вообщем где то в какой то игре была хукнута одна функция int function(int arg1,int arg2,int arg3); суть в чем int...

Размер строки по указателю на неё - C++
int Size(char* text) { return size; // надо вычислить } Size(&quot;hello&quot;); Я передаю в ф-ию строку , как вернуть её размер...

Вызов функции по указателю из класса - C++
Такой расклад. Допустим имеем код: #include &lt;iostream&gt; using namespace std; template &lt;class _Tp&gt; class my_mem_fun_t { ...

8
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 20:35 #2
беда в том что вы возвращаете локальный указатель
1
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 20:38  [ТС] #3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
беда в том что вы возвращаете локальный указатель
Локальный указатель ? ,
Кажется понимаю, массив разрушается после выхода из функции ?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 20:41 #4
верно
0
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 20:44  [ТС] #5
Цитата Сообщение от Maxwe11 Посмотреть сообщение
верно
Мне нужен вариант возврата массива созданного в функции. Если по указателю нельзя, тогда как можно.
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
09.05.2011, 20:49 #6
Используй ключевое слово static:

C++
1
2
3
4
5
char *func()
{
    static char arr[10]="stro4ka";
    return arr;
}
1
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 20:52  [ТС] #7
Amarted, Спасибо, работает.
А если я создам в функции многомерный массив
C++
1
char arr[10][10];
Как вернуть его ?
0
resource2008
109 / 109 / 2
Регистрация: 11.03.2011
Сообщений: 421
09.05.2011, 21:18 #8
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Как вернуть его ?
так же само.

C
1
return arr;
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
09.05.2011, 21:23 #9
Цитата Сообщение от Maxwe11 Посмотреть сообщение
беда в том что вы возвращаете локальный указатель
Точнее будет сказать не "локальный указатель", а указатель на локальную перменную. Например здесь
C++
1
2
3
4
5
const char* func()
{
    const char* s = "stro4ka";
    return s;
}
также возвращается локальный указатель, однако делать так можно(строковые литералы существуют на протяжении всей работы программы).
Мне нужен вариант возврата массива созданного в функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char* func()
{
    char* a = new char[размер_массива];
    // ...
    return a;
}
 
int main()
{
    ...
    char* array = func();
    ...
    delete[] array; // освобождаем память
}
3
09.05.2011, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 21:23
Привет! Вот еще темы с ответами:

Вызов виртуальной функции по указателю - C++
Суть в том, что преподаватель дал задание на защиту курсовой: вызов по указателю виртуальной функции из ТВР, искал в интернете, наткнулся...

Вызов виртуальной функции по нулевому указателю - C++
struct A { int sum1(int a, int b) { return a+b; } virtual int sum2(int a, int b) { return a+b; } }; int main() { ...

Передача параметров функции по значению, ссылке и указателю - C++
Вычислить F=f(a)-5f^3(sin(b/2))+1/f(1+c^4), де f(x)=3x^2-2x^2+7, при a=5.08, b=-0.65, c=3.87 Добавлено через 45 минут #include...

Передача массива из главной функции в неглавную по указателю. - C++
Доброго времени суток! Задача: В функции main() сформировать матрицу M со случайными числами. Её передать по указателю в не главную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.