Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/76: Рейтинг темы: голосов - 76, средняя оценка - 4.84
7 / 7 / 1
Регистрация: 19.04.2011
Сообщений: 68
1

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

09.05.2011, 20:34. Показов 14060. Ответов 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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2011, 20:34
Ответы с готовыми решениями:

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

Возврат строки из функции
Всем привет. Написал следуюущую фунцию для генерации рандомных строк : LPWSTR RandomString(int...

Возврат строки из функции
ну столкнулся с такой задачей недавно скажите по средствам stdio.h такой трюк не оформить? я...

Возврат строки из функции
//char perfomers; //char _perfomers; char GetPerfomers(){strcpy(_perfomers,perfomers);return...

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

C
1
return arr;
0
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
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; // освобождаем память
}
4
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2011, 21:23

Возврат c-style строки из функции
Здравствуйте, пытаюсь решить задачу на степике, но не получается. Поэтому воспользовался Qt и...

Удаление строки по указателю
Прошу прощения за столь глупый вопрос: как удалить строку по указателю. Т.е. char *s = new char;...

Вызов функции по указателю
#include &quot;main.h&quot; void* samp; unsigned char keyact = 0x30; void attach(void*) { while...

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


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

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

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