Форум программистов, компьютерный форум CyberForum.ru

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

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

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

09.05.2011, 20:34. Просмотров 4003. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 20:35     Возврат строки из функции по указателю #2
беда в том что вы возвращаете локальный указатель
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 20:38  [ТС]     Возврат строки из функции по указателю #3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
беда в том что вы возвращаете локальный указатель
Локальный указатель ? ,
Кажется понимаю, массив разрушается после выхода из функции ?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.05.2011, 20:41     Возврат строки из функции по указателю #4
верно
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 20:44  [ТС]     Возврат строки из функции по указателю #5
Цитата Сообщение от Maxwe11 Посмотреть сообщение
верно
Мне нужен вариант возврата массива созданного в функции. Если по указателю нельзя, тогда как можно.
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;
}
LedZeppelin
7 / 7 / 0
Регистрация: 19.04.2011
Сообщений: 68
09.05.2011, 20:52  [ТС]     Возврат строки из функции по указателю #7
Amarted, Спасибо, работает.
А если я создам в функции многомерный массив
C++
1
char arr[10][10];
Как вернуть его ?
resource2008
109 / 109 / 2
Регистрация: 11.03.2011
Сообщений: 421
09.05.2011, 21:18     Возврат строки из функции по указателю #8
Цитата Сообщение от LedZeppelin Посмотреть сообщение
Как вернуть его ?
так же само.

C
1
return arr;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2011, 21:23     Возврат строки из функции по указателю
Еще ссылки по теме:
C++ Вызов виртуальной функции по нулевому указателю
Передача массива из главной функции в неглавную по указателю. C++
Передача параметров функции по значению, ссылке и указателю C++
C++ Выделение динамической памяти указателю в локальной функции
Запись по ссылке или указателю в аргументы функции через макрос va_arg C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
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; // освобождаем память
}
Yandex
Объявления
09.05.2011, 21:23     Возврат строки из функции по указателю
Ответ Создать тему
Опции темы

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