Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/75: Рейтинг темы: голосов - 75, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240

Как из функции вернуть массив символов?

23.02.2016, 22:44. Показов 15475. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.Как возвратить массив символов?Читал другие темы,понял что надо создавать динамическую память,потом удалять её,по другому никак нельзя?Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2016, 22:44
Ответы с готовыми решениями:

Вернуть из функции массив символов
Здравствуйте! Не получается никак решить задачу. Напишите функцию merge, которая соединяет две строки в одну так, чтобы символы двух...

Как вернуть массив в данной функции ? Или как записать массив в переменную ?
#pragma once #include "stdafx.h" const int S = 49; int bin2; int decbin(int a, int sistem) { double b;

Как вернуть массив из функции?
Изучал массивы в C++, хотел написать функцию которая принимает, изменяет и возвращает массив: numbers = { 1,1,1,1,1 }; int...

26
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2016, 22:58
Можно не создавать в локальной области, чтобы не возвращать. Именно массив (размер известен на этапе компиляции), или блок данных в динамической памяти?
1
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
23.02.2016, 23:07
ыыы...
char mas[] = "simbols";
return mas;
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2016, 23:12
Цитата Сообщение от nofx Посмотреть сообщение
return mas;
Возвращаешь указатель на то, что исчезнет после выхода из функции.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.02.2016, 00:05
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
Как возвратить массив символов?
http://rextester.com/GXIH96746
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
 
// --- синтаксис передачи массива в функцию.
template<class T, size_t N>
void Fill( T (&arr)[N] )   
{
    for(size_t i=0;i<N;++i )
        arr[i] = i;
        
}
 
// --- синтаксис возвращения массива из функции
template<class T, size_t N>
T ( &Get() )[N]
{
    static T arr[N];
    return arr;
}
 
 
// --- синтаксис функции, которая принимает массив по ссылке
// и возвращает массив по ссылке
template<class T, size_t N>
T (&Example( T (&arr)[N] )   )[N]
{
    Fill(arr);
    
    auto& dst = Get<T,N>();
    
    for(size_t i=0;i<N;++i ) 
        dst[i]= arr[i]*10;
    
    return dst; 
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    int a[10] = {};
    
    const auto& result = Example(a);
    
    std::cout<<"int result[10] = {";
    for(const auto& i: result)
        std::cout<< i <<", ";
    std::cout <<"};\n";
    
}
1
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
24.02.2016, 00:08  [ТС]
В общем пишу функцию которая преобразует string в char все работает,осталось просто возвратить char-строку
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.02.2016, 00:15
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
которая преобразует string в char
А зачем её преобразовывать в char-строку? У string для этого функция есть: c_str().
1
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
24.02.2016, 00:16  [ТС]
Ну имею ввиду в массив символов
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.02.2016, 00:19
...
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
осталось просто возвратить char-строку
Цитата Сообщение от nd2 Посмотреть сообщение
Именно массив (размер известен на этапе компиляции), или блок данных в динамической памяти?
Добавлено через 44 секунды
Показал бы код лучше, чем гадать...
1
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
24.02.2016, 06:39  [ТС]
Щас не могу,сижу через телефон.Отправлю завтра

Добавлено через 6 часов 6 минут
вот нерабочий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char func(string str){
    char str_ch[str.size()];
for(int i=0;i<=str.size();i++){
    str_ch[i]=str[i];
    }
    return str_ch;
}
int main(){
    char a;
    a=func("qwerty");
    cout<<a<<endl;
    system("pause");
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.02.2016, 11:09
Если оставить идею, то только через new:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char* func(std::string str)
{
    char* str_ch = new char[str.size() + 1];
    int i;
    for(i = 0; i < str.size(); i++)
    {
        str_ch[i] = str[i];
    }
    str_ch[i] = '\0';
    return str_ch;
}
 
int main()
{
    char* a;
    a = func("qwerty");
    std::cout << a << std::endl;
        
    delete [] a;
    system("pause");
}
1
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 240
24.02.2016, 20:59  [ТС]
в одной функции выделить память,в другой удалить её,разве не получается каламбур?

Добавлено через 14 секунд
или нечего страшного?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.02.2016, 02:01
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
или нечего страшного?
Абсолютно нормально. Но если очень хочется, то можно код изменить и в main() выделять память:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void func(const std::string& str, char* str_ch)
{
    int i;
    for(i = 0; i < str.size(); i++)
        str_ch[i] = str[i];
    
    str_ch[i] = '\0';
}
 
int main()
{
    std::string str("qwerty");
    char* str_ch = new char[str.size() + 1];
    
    func(str, str_ch);
    
    std::cout << str_ch << std::endl;
        
    delete [] str_ch;
    system("pause");
}
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.02.2016, 02:27
Цитата Сообщение от Amir_05_05 Посмотреть сообщение
или нечего страшного?
это - очень порочная практика.
приводит к утечкам памяти, и это - в лучшем случае.

основная же проблема, которую провоцирует данный ущербный подход,
заключается в утери контроля над сложностью проекта,
что приводит к мерзким (трудно обнаруживаемым, плавающим) ошибкам.
в перспективе имеем говнокод в терминальной стадии,
что выражается в убытках компании на отладке и сопровождении.

правило очень простое:
кто выделял память, тот и должен её освобождать.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.02.2016, 03:06
Цитата Сообщение от hoggy Посмотреть сообщение
это - очень порочная практика.
приводит к утечкам памяти, и это - в лучшем случае.
hoggy, это про что? Про выделение динамической памяти в функциях?
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.02.2016, 03:40
Цитата Сообщение от nd2 Посмотреть сообщение
это про что?
про нарушение инкапсуляции связанное с путаницей,
которая возникает в ситуациях,
когда память выделяет одна сторона,
а освобождать должна другая.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.02.2016, 03:43
И какие хорошие решения есть?
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.02.2016, 03:55
Цитата Сообщение от nd2 Посмотреть сообщение
И какие хорошие решения есть?
см #14, последний абзац.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.02.2016, 04:05
Цитата Сообщение от hoggy Посмотреть сообщение
см #14, последний абзац.
Т.е, вариант в 13 посте?
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
25.02.2016, 04:22
Цитата Сообщение от nd2 Посмотреть сообщение
Т.е, вариант в 13 посте?
это было бы так,
если бы не первое предложение #13 поста.

а вообще забавный получился образчик ugly:
бессмысленного, и беспощадного.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2016, 04:22
Помогаю со студенческими работами здесь

Как вернуть массив из функции?
В общем есть функция: ? foo() { array&lt;array&lt;double, N&gt;, 10&gt; Wave; .... return ?; } Как правильно написать return?

Как вернуть массив из функции?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int mass(int n) { int* Mass = new int; //здесь...

Как вернуть массив из функции?
у меня есть две функции: Одна должна возвращать три числа, а вторая двумерный массив 10Х10; Как это провернуть?

Как вернуть массив из функции?
не могу передать массив из функции mas(). Как передать массив из функции и записать в массив arr()? #include &quot;stdafx.h&quot; ...

Как вернуть массив из функции?
int SumElementovStolbca(int M, int mas, int N) { int sum = 0; for (int i = 0; i&lt;N; i++) { for (int j = 0; j&lt;N; j++) {...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru