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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.93
Praz
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 9
01.07.2012, 12:47     Функция возвращает строку (или указатель на начало строки) #1
Подскажите пожалуйста. Застрял на тривиальной задачке. Никак не могу добится чтобы функция возвращала корректно строку.(правильнее наверное будет сказать указатель на начало строки). Вот код примера на котором пробую:
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++
C++ Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на преобразованную строку
C++ Функция принимает указатель на void и возвращает указатель на int
Функция с указателем и индексом(Удаляет в строке лидирующие пробелы. Возвращает указатель на преобразованную строку.) 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
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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     Функция возвращает строку (или указатель на начало строки)
Ответ Создать тему
Опции темы

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