Връщане на низ от C функция

Vr Sane Na Niz Ot C Funkcia



А низ е поредица от знаци, която се състои или от един знак, или от няколко знака и е важна структура от данни в компютърното програмиране. При работа с струни в C се изискват определени операции за извършване на низ тип данни като инициализиране на низ , присвояване на съдържание, свързване на струни , сравнявайки струни , и връщане на низ .

Тази статия се фокусира върху една такава операция в низ структура от данни, която връща a низ от C функция.







Връщане на низ от C функция

Като низ е масив от знаци и за да се върне низ от C функция, указател към структурата на низови данни трябва да бъде предаден като аргумент от извикващата функция към извиканата функция като параметър. След това указателят може да се използва за посочване на масив от знаци. След като показалецът посочи масив от знаци, низ стойността може да бъде върната от извиканата функция с помощта на израза return.



Можете да разгледате дадения по-долу пример за по-добро разбиране.



#include

const char * моето име ( ) {
връщане 'Джон' ;
}

int main ( невалиден ) {
printf ( '%с' , моето име ( ) ) ;
}





В горния код, вместо да декларираме променливата, както правим обикновено, използвахме указател с нея, така че когато върнем този низ, да не възникне грешка.

Изход




C функция не може да върне a низ която е посочена като локална променлива, тъй като променливата ще бъде незабавно премахната (освободена), когато функцията приключи, което ще я направи недостъпна и ще задейства предупреждение, както е показано по-долу:

#include

const char myName ( ) {
char име = 'Джон' ;
връщане име;
}

int main ( невалиден ) {
printf ( '%с' , моето име ( ) ) ;
}

В този код, a внимание се задейства при връщане на низ без всеки указател.

Изход


Така че можете да напишете кода по следния начин:

#include

const char * моето име ( ) {
въглен * име = 'Джон' ;
връщане име;
}
int main ( невалиден ) {
printf ( '%с' , моето име ( ) ) ;
}

Изход


Променливите се разпределят в стека по подразбиране, което е действителната причина за горното твърдение. Въпреки това, когато се декларира указател, стойността, към която сочи, се разпределя в купчината, която не се изчиства след завършване на функцията. След като паметта бъде разпределена, копие на низ трябва да бъде създадено от оригиналното място в паметта, посочено от показалеца, и копието трябва да бъде върнато от извиканата функция. След това извикващата функция ще има контрол върху оригиналните низови данни, докато извиканата функция е отговорна за освобождаването на разпределеното пространство.

Заключение

C функция може да вземе указател към низ като аргумент и върнете низ стойност в резултат на операциите, извършени в рамките на извиканата функция. Подходът за постигане на това е използването на указател на char*. Извикващата функция ще отговаря за паметта, разпределена за съхраняване на низ , докато извиканата функция е отговорна за освобождаването на разпределеното пространство.