13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
1

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

10.07.2018, 19:42. Показов 16950. Ответов 6
Метки нет (Все метки)

Здрасьте! Мне необходимо вернуть строку из функции, но Я чего то не понимаю.Вот простенькая программка, где отдельная функция должна вернуть в main(); последний символ строки:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
void Get(char *a) {
    char c, *name = NULL;
    int sym = 0;
    while ((c = getchar()) != '\n') {
        name = (char*)realloc(name, (sym + 1) * sizeof(int));
        name[sym] = c, sym++;
    }
    *a = name[sym];
}
 
void main(void) {
    char *a[1];
    Get(&a);
}
Только вот в память *a записывается первый элемент массива, а не последний. В main(); ничего ошибка чтения памяти.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2018, 19:42
Ответы с готовыми решениями:

Как правильно вернуть из функции сформированную в ней строку?
Как правильно вернуть из функции сформированную в ней строку? Возвращать массив это- возвращать...

Как передать в функцию строки и вернуть строку из функции?
Добрый день! Мне нужно передать две строки функции, а потом, проведя операции над ними, вернуть...

Как передать в функцию строку и вернуть число int
Привет всем! Надеюсь у вас все отлично. Никак мне функция не может поддаться, очень трудно. ...

Как вернуть 2 значения из функции?
Добрый день. У меня такой вопрос - как в этой проге можно вернуть 2 значения из функции? #include...

6
183 / 169 / 92
Регистрация: 13.06.2018
Сообщений: 699
10.07.2018, 19:46 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
void Get(char *a) 
{
    char c;
    while ((c = getchar()) != '\n')  *a=c;
 
}
 
void main(void) 
{
    char a;
    Get(&a);
    putc(a);
}
1
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
10.07.2018, 19:58  [ТС] 3
Biger18, а если появиться необходимость вернуть всю строку из функции, как это можно реализовать? У меня не получается обратится к нужной области памяти из main();
0
183 / 169 / 92
Регистрация: 13.06.2018
Сообщений: 699
10.07.2018, 20:08 4
Лучший ответ Сообщение было отмечено Adrian_One как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
void Get(char *a) 
{
    char c;
    while ((c = getchar()) != '\n')  *a++=c;
 
}
void main()
{
    char a[100]="";
    Get(a);
    printf("%s",a);
1
Диссидент
Эксперт C
27197 / 16952 / 3747
Регистрация: 24.12.2010
Сообщений: 38,134
10.07.2018, 22:09 5
Цитата Сообщение от Adrian_One Посмотреть сообщение
вернуть всю строку из функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char *Get(int n)
{
   char *a = malloc(n+1); // или new
     // Заполнение строки 
     // Например
   for(int i=0; i<n; i++)
      a[i] = ' ';
   a[n] = '\0';
   return a;
}
int main()
{
   char *aa = Get(20);
   cout << aa << endl;
   return 0;
}
Добавлено через 7 минут
Adrian_One, Прошу прощения, мне показалось, что тема в разделе С++
Для С просто замените строчку 14 на printf.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
33829 / 18861 / 3975
Регистрация: 12.02.2012
Сообщений: 31,638
Записей в блоге: 12
11.07.2018, 18:25 6
Цитата Сообщение от Байт Посмотреть сообщение
Для С просто замените строчку 14 на printf.
и не забудь перед return 0 вставить free(aa);
1
Диссидент
Эксперт C
27197 / 16952 / 3747
Регистрация: 24.12.2010
Сообщений: 38,134
11.07.2018, 21:33 7
Цитата Сообщение от Catstail Посмотреть сообщение
и не забудь перед return 0 вставить free(aa);
Да, конечно. В данном конкретном случае это не важно, так как при конце работы программы вся динамическая память автоматом освобождается, но вообще-то - это хорошая привычка - освобождать динамическую память, как только она становится не нужна.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2018, 21:33
Помогаю со студенческими работами здесь

Как вернуть строку из функции на C++ (которая находится в dll) в C# проект?
Добрый день, есть dll на C++, которая служит как бы оберткой к сишной библиотеке. В этой Dll есть...

Вернуть строку из функции.
Как вернуть строку(AnsiString) из функции? int MyTXT (AnsiString Temlate, AnsiString tmp) { ...

Вернуть указатель на строку из функции
Есть на с++ у меня функция: char *PrToStr(DWORD priority) { char *s; switch (priority) {...

Принять в параметр функции строку и вернуть ее же,но измененную
Здравствуйте!Такая проблема:есть функция,принимающая в качестве аргумента строку и,проведя...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru