C语⾔:函数返回字符串的四种⽅法
转载连接:
四种返回字符串的⽅法:
1、将字符串指针作为函数参数传⼊,并返回该指针。
2、使⽤malloc函数动态分配内存,注意在主调函数中释放。
3、返回⼀个静态局部变量。
4、使⽤全局变量。
详细解释:
⽅法⼀:将字符串指针作为函数参数传⼊,并返回该指针。
典型的strcpy()函数应该就是采⽤的这种⽅法,第⼀个参数为指向⽬的字符串的指针,返回值也为这个指针。
char* strcpy(char* des,const char* source)
{
char* r=des;
assert((des != NULL) && (source != NULL));
 while((*r++ = *source++)!='\0');
 return des;
}
⽅法⼆:使⽤malloc函数动态分配,但是⼀定要注意在主调函数中将其释放,应为malloc动态分配的内存位于堆区,⽽堆区的内存是要程序员⾃⼰释放的。
⼀个例⼦如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * retstring();
int main()
{
char * name2;
name2 = retstring();
printf("%s\n",name2);
//记住⼀定要⽤free释放,否则会造成内存泄露
free(name2);
return0;
}
char * retstring()
molloc函数{
char * name;
name = (char *)malloc(10);
strcpy(name,"张汉青");
return name;
}
⽅法三:返回⼀个静态局部变量。
⼀个例⼦如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * retstring();
int main()
{
char * name2;
name2 = retstring();
printf("%s\n",name2);
return0;
}
char * retstring()
{
static char name[10];
strcpy(name,"张汉青");
return name;
}
这种⽅法有⼀个问题:由于采⽤了静态局部变量(位于静态区,程序结束时由系统进⾏释放),这就导致,如果多次调⽤这个函数,下⼀次调⽤会将上⼀次调⽤的结果覆盖掉。
C语⾔中的库函数,tmpnam()函数、getenv()函数等应该都是采⽤的这种⽅法,这也就是为什么,使⽤这样的函数的时候应该⽴即将返回结果拷贝⼀份的原因。
⽅法四:使⽤全局变量。
⼀个例⼦如下:
char  g_s[100];
char*  fun()
{
strcpy(g_s,  "abc ");
return  g_s;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。