C语言:函数返回字符串的四种方法

C语言:函数返回字符串的四种方法

转载连接:

1.https://blog.csdn.net/turkeyzhou/article/details/6104135#comments

2.https://www.cnblogs.com/qingergege/p/6496683.html

四种返回字符串的方法:

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

#include

#include

char * retstring();

int main()

{

char * name2;

name2 = retstring();

printf("%s\n",name2);

//记住一定要用free释放,否则会造成内存泄露

free(name2);

return 0;

}

char * retstring()

{

char * name;

name = (char *)malloc(10);

strcpy(name,"张汉青");

return name;

}方法三:返回一个静态局部变量。

一个例子如下:

#include

#include

#include

char * retstring();

int main()

{

char * name2;

name2 = retstring();

printf("%s\n",name2);

return 0;

}

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;

}

相关推荐

微信竟然可以查出行轨迹了?
365取消提款

微信竟然可以查出行轨迹了?

📅 07-27 👁️ 1681
MTK Boost中文版
约彩365手机下载安装

MTK Boost中文版

📅 07-09 👁️ 2696
软考备考时间准备多久合适呢?
约彩365手机下载安装

软考备考时间准备多久合适呢?

📅 07-30 👁️ 5218
小脸女生适合的短发发型 百搭短发打造精致脸型
约彩365手机下载安装

小脸女生适合的短发发型 百搭短发打造精致脸型

📅 08-06 👁️ 2823
四、小牛电动UM外观
约彩365手机下载安装

四、小牛电动UM外观

📅 07-16 👁️ 2593
傻春每集劇情介紹1-34集大結局
约彩365手机下载安装

傻春每集劇情介紹1-34集大結局

📅 07-04 👁️ 6405