Как правильно вернуть из функции сформированную в ней строку? - 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 символов).