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

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

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

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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     Возврат строки из функции по указателю
Ответ Создать тему
Опции темы

Текущее время: 23:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru