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

Узнай цену своей работы

Формулировка задачи:

Как правильно вернуть из функции сформированную в ней строку? Возвращать массив это- возвращать указатель на первый элемент. Но возвращать указатель на динамические данные нельзя, при возврате из функции они станут невалидными. Можно объявить массив как static и такой прием есть. А как еще?
char * postfix(...)
{
 char pstfx[100]
 .....//формирование строки pstfx
 return pstfx;
}
void main()
{ 
 char *sout=postfix(...);//такой вызов глючный
 ...
}
если объявить скажем char sout[100] то не пройдет вызов 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++;}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с консолью и стандартным вводом-выводом.
  2. Объявление функции GetString, которая принимает два аргумента: строку s и максимальное количество символов maxlen.
  3. В функции main создание строки name с фиксированным размером в 10 символов.
  4. Вывод сообщения с просьбой ввести имя.
  5. Вызов функции GetString для заполнения строки name.
  6. Вывод результата работы функции GetString с помощью функции printf.
  7. В функции GetString создание буфера buffer с фиксированным размером в 128 символов.
  8. Инициализация переменной i для подсчета количества введенных символов.
  9. Считывание строки из стандартного ввода в буфер с помощью функции gets.
  10. Если maxlen не равно нулю, то уменьшение его значения на единицу.
  11. Инициализация индекса i для записи символов из буфера в строку s.
  12. Пока в буфере есть символы и они не являются нулевыми, запись символа в строку s и увеличение индекса i.
  13. Возврат из функции GetString без дополнительных действий.
  14. В функции main завершение работы программы с помощью функции getch.
  15. В функции main возвращение значения 0 для успешного завершения программы.
  16. В функции GetString не обрабатывается ситуация, когда введенная строка превышает максимальное количество символов.
  17. В функции GetString не обрабатывается ситуация, когда в буфере недостаточно места для записи строки.
  18. В функции GetString не обрабатывается ситуация, когда введенный символ является нулевым символом.
  19. В функции GetString не обрабатывается ситуация, когда введенная строка превышает максимально допустимую длину строки в C.
  20. В функции main не обрабатывается ситуация, когда введенная строка не соответствует ожидаемому формату (9 символов).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.833 из 5
Похожие ответы