Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.63
777Julia777
1 / 1 / 1
Регистрация: 28.10.2012
Сообщений: 40
#1

Как передать в функцию строки и вернуть строку из функции? - C (СИ)

18.11.2012, 18:43. Просмотров 7812. Ответов 5
Метки нет (Все метки)

Добрый день!
Мне нужно передать две строки функции, а потом, проведя операции над ними, вернуть одну из них. Я пробую так (printf'ом я только проверяю, что передалось в функцию):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
char glas (char *str1, char *str2);
int main ()
{
    char s1[100], s2[100], stroka;
    printf ("vvedite stroku 1  \n");
    gets(s1);
    printf ("vvedite stroku 2  \n");
    gets(s2);       
    printf("stroka 1 = %s \n", s1);
    printf("stroka 2 = %s \n", s2);
    stroka = glas (&s1[100], &s2[100]);
    printf("ITOGOVAYA stroka = %s \n \n \n", stroka);
    return (0);
}
char glas (char *str1, char *str2)
{
    printf("Per: %s \n", str1);
    printf("Vtor: %s \n \n", str2);
        <...>
}
Ну так уже на строчках
printf("Per: %s \n", str1);
printf("Vtor: %s \n \n", str2);

Он выдает не те строки, которые я пыталась передать в функцию.
Помогите, пожалуйста, как правильно передать строки в функцию??


2) И еще один вопрос. Можно как-нибудь не указывать длину строки в [], а сделать как-нибудь, чтобы после ввода он сам ее определил?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 18:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как передать в функцию строки и вернуть строку из функции? (C (СИ)):

Как передать строку в функцию?
send_package(&quot;too long!\n&quot;); Подскажите как передать строку в функцию?...

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

Передать массив в функцию, произвести манипуляции с ним, вернуть его
Всем привет, при написании программы возникли некоторые сложности, нужно...

Как передать указатель функции в другую функцию?
Добрый вечер.:) Кто нибудь знает как передать указатель функции в другую? ...

Можно ли передать функцию как аргумент другой функции?
mojno li v iazike C peredati functiiu kak argument drugoi functii. sori za...

Создать dll и вернуть из функции значение строки
вообщем надо на си сделать отдельную длл и вернуть значение а как не умею...

5
nantexnik
8 / 8 / 5
Регистрация: 24.05.2012
Сообщений: 18
18.11.2012, 18:57 #2
1.Ваша функция glass принимает указатели на char, когда вы написали
C
1
char s1[100];
вы создали массив char, и сам s1 является указателем на первый элемент этого массива, его и нужно передавать.
Тоесть получим, что вызов функции glass будет таким
C
1
glas(s1, s2);
так же сразу хочу сказать что stroka в данном случае это только один символ, и ваша функция так и возвращает, но чуствую что вы хотите возвращать строку. Тогда вам надо писать
C
1
char *stroka;
,
и прототип функции будет
C
1
char *glas(char *str1, char*str2);
1
СашаН
268 / 268 / 144
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
18.11.2012, 19:21 #3
Цитата Сообщение от 777Julia777 Посмотреть сообщение
Мне нужно передать две строки функции, а потом, проведя операции над ними, вернуть одну из них.
Можно сделать так, но просто так изменяемую строку увеличивать нельзя.
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
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
char *glas(char *str1, char *str2);
 
int main(void)
{
    char s1[100], s2[100], *stroka;
    puts("vvedite stroku 1");
    gets(s1);
    puts("vvedite stroku 2");
    gets(s2);
 
    stroka = glas(s1, s2);
    putchar('\n');
    printf("ITOGOVAYA stroka = %s \n\n\n", stroka);
 
    return 0;
}
 
char *glas(char *str1, char *str2)
{
    int i, end;
    putchar('\n');
    printf("Per: %s\n", str1);
    printf("Vtor: %s\n", str2);
    end = strlen(str1);
    for (i=0; i<end; i++)
        str1[i] = toupper(str1[i]);
    return str1;
}
1
777Julia777
1 / 1 / 1
Регистрация: 28.10.2012
Сообщений: 40
18.11.2012, 19:25  [ТС] #4
nantexnik, спасибо... Но я все равно не поняла немного. А как мне тогда стоит написать?

Так тоже не работает:
C
1
2
3
4
5
6
7
8
9
10
11
        <...>
    stroka = glas (s1[100], s2[100]);
    printf("ITOGOVAYA stroka = %s \n \n \n", stroka);
    return (0);
}
char glas (char *str1, char *str2)
{
    printf("Per: %s \n", str1);
    printf("Vtor: %s \n \n", str2);
}
        <...>
Еще и ошибку выдает(

Добавлено через 1 минуту
СашаН, Оооо.. Спасибо, я сейчас попробую реализовать полностью со всем вместе)
0
nantexnik
8 / 8 / 5
Регистрация: 24.05.2012
Сообщений: 18
18.11.2012, 19:29 #5
Так тоже не работает:
C
1
 stroka = glas (s1[100], s2[100]);
Еще и ошибку выдает(

я туда просто как
[С]stroka = glas (s1, s2);[/C]

без указания размера передаю, тот код без ошибок собирается.

Так же функция char* glass, у вас по прежнему просто char glass.
1
777Julia777
1 / 1 / 1
Регистрация: 28.10.2012
Сообщений: 40
18.11.2012, 20:01  [ТС] #6
У меня вроде получилось!!! Все огромное спасибо!)
0
18.11.2012, 20:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 20:01
Привет! Вот еще темы с решениями:

Передать математическую функцию другой функции
Суть задачи такова у меня есть функция мэйн, допустим void main() { int i=1;...

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

Как передать кусок матрицы в функцию
Есть матрица 9x9, нужно передать не всю матрицу, а её кусок, указав координаты...

Как передать массив структур в функцию?
нужно создать массив структур и передать его в функцию на сортировку по...


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

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

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