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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.93
Praz
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 9
#1

Функция возвращает строку (или указатель на начало строки) - C++

01.07.2012, 12:47. Просмотров 5200. Ответов 3
Метки нет (Все метки)

Подскажите пожалуйста. Застрял на тривиальной задачке. Никак не могу добится чтобы функция возвращала корректно строку.(правильнее наверное будет сказать указатель на начало строки). Вот код примера на котором пробую:
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
#include<string.h>
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
 
char str_rev(char *s1)
{
    char s[100]="Hello";
    *s1=s[0];
    return *s1;
}
 
main()
{
 char s[100],r[100];
 int i=0,j=0;
 *r=str_rev(s);
 for(i=0;i<strlen(r);i++)
    cout<<r[i];
 cout<<endl;
 puts(r);
 getch();
 return 0;
}
Пробовал уже по разному - ничего не выходит, на выходе - краказябры.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2012, 12:47     Функция возвращает строку (или указатель на начало строки)
Посмотрите здесь:

Функция возвращает указатель на нужную ячейку переданного массива, но адрес другой C++
Функция fopen возвращает нулевой указатель (Visual Studio) C++
C++ Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на преобразованную строку
C++ Функция принимает указатель на void и возвращает указатель на int
C++ Как сдвинуть указатель файла НА НАЧАЛО уже считанной строки?
Функция с указателем и индексом(Удаляет в строке лидирующие пробелы. Возвращает указатель на преобразованную строку.) C++
C++ Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве)
Функция получает массив указателей на строки и возвращает строку в динамической памяти, содержащую объединенный текст из входных строк C++
Передать в функцию указатель на начало и конец строки квадратной матрицы C++
C++ Функция, получающая подстроку, возвращает испорченный указатель на строку
C++ Как функция возвращает указатель на структуру в массив указателей
Функция формирует массив и возвращает указатель на него C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
01.07.2012, 13:33     Функция возвращает строку (или указатель на начало строки) #2
чтобы возвращать указатель, нужно соответственно объявить функцию
C++
1
char* str_rev(char *s1)
т.е указать, что она возвращает указатель на char.
переменные в main тоже нужно объявить как указатели.
еще вы в аргументе передаете указатель, поэтому его можно и не возвращать.

только вроде нельзя возвращать указатель на память, выделенную в этой функции, т.к память освободится и данные будут утеряны.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
01.07.2012, 14:01     Функция возвращает строку (или указатель на начало строки) #3
как вариант - std::unique_ptr
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <memory>
#include <cstring>
 
std::unique_ptr<char[]> F()
{
    const char* p = "Hello, world!";
    std::unique_ptr<char[]> up(new char[std::strlen(p) + 1]);
    std::strcpy(up.get(), p);
    return up;
}
 
int main()
{
    std::cout << F().get() << std::endl;
    return 0;
}
visokii
 Аватар для visokii
-2 / 0 / 0
Регистрация: 23.06.2010
Сообщений: 8
18.12.2014, 00:32     Функция возвращает строку (или указатель на начало строки) #4
Можно просто в 8ой строке char s[100]="Hello"; написать static char s[100]="Hello";
Yandex
Объявления
18.12.2014, 00:32     Функция возвращает строку (или указатель на начало строки)
Ответ Создать тему
Опции темы

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