Как правильно вернуть из функции сформированную в ней строку? - C (СИ)
Формулировка задачи:
Как правильно вернуть из функции сформированную в ней строку?
Возвращать массив это- возвращать указатель на первый элемент. Но возвращать указатель на динамические данные нельзя, при возврате из функции они станут невалидными. Можно объявить массив как static и такой прием есть.
А как еще?
если объявить скажем char sout[100] то не пройдет вызов postfix
Мне давали такой совет: длину строки и массив разместить в локальной структуре, а потом возвращать саму структуру.
char * postfix(...) { char pstfx[100] .....//формирование строки pstfx return pstfx; } void main() { char *sout=postfix(...);//такой вызов глючный ... }
Решение задачи: «Как правильно вернуть из функции сформированную в ней строку?»
textual
Листинг программы
#include <conio.h> #include <stdio.h> void GetString(char s[], unsigned maxlen); main() { char name[10]; printf("Enter your name (9 character limit):"); GetString(name, 10); printf("Result == %s\n", name); getch(); return 0; } void GetString(char s[], unsigned maxlen) { char buffer[128]; int i; gets(buffer); if (maxlen != 0) --maxlen; i = buffer[maxlen]= 0; while ((s[i]= buffer[i]) != 0) i++;}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с консолью и стандартным вводом-выводом.
- Объявление функции
GetString
, которая принимает два аргумента: строкуs
и максимальное количество символовmaxlen
. - В функции
main
создание строкиname
с фиксированным размером в 10 символов. - Вывод сообщения с просьбой ввести имя.
- Вызов функции
GetString
для заполнения строкиname
. - Вывод результата работы функции
GetString
с помощью функцииprintf
. - В функции
GetString
создание буфераbuffer
с фиксированным размером в 128 символов. - Инициализация переменной
i
для подсчета количества введенных символов. - Считывание строки из стандартного ввода в буфер с помощью функции
gets
. - Если
maxlen
не равно нулю, то уменьшение его значения на единицу. - Инициализация индекса
i
для записи символов из буфера в строкуs
. - Пока в буфере есть символы и они не являются нулевыми, запись символа в строку
s
и увеличение индексаi
. - Возврат из функции
GetString
без дополнительных действий. - В функции
main
завершение работы программы с помощью функцииgetch
. - В функции
main
возвращение значения 0 для успешного завершения программы. - В функции
GetString
не обрабатывается ситуация, когда введенная строка превышает максимальное количество символов. - В функции
GetString
не обрабатывается ситуация, когда в буфере недостаточно места для записи строки. - В функции
GetString
не обрабатывается ситуация, когда введенный символ является нулевым символом. - В функции
GetString
не обрабатывается ситуация, когда введенная строка превышает максимально допустимую длину строки в C. - В функции
main
не обрабатывается ситуация, когда введенная строка не соответствует ожидаемому формату (9 символов).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д