方法一:将字符串指针作为函数参数传入,并返回该指针。
strcpy()函数应该就是采用的这种方法,strcpy()是C语言中的一个复制字符串的库函数,以下将详细解释说明一下:
函数声明
char *strcpy(char *dst, const char *src)
实现代码
char * strcpy(char *dst,const char *src)
{
if((dst==NULL) || (src==NULL))
return NULL;
char *ret = dst; //[1]
while ((*dst++=*src++)!='\0'); //[2]
return ret;//[3]
}
(1)const 修饰:源字符串参数用const修饰,防止源字符串被修改;
(2)检查空指针:源指针和拷贝指针都有可能出现空指针的情况,应对其进行检查;
(3)为什么要设置ret 指针以及返回ret指针的位置[3],由于目的指针dst已经在进行移动了,所以用辅助指针ret表明首指针;
(4)以上所示[2]处,为简单的字符串的复制过程,正好表明strcpy函数遇到'\0'将会停止;
方法二:使用malloc函数动态分配,切记切记在主调函数中释放malloc分配的内存,由于malloc动态分配的内存位于堆区,堆区内存需要而程序员自己释放的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* returnstring();
int main()
{
char* str0 = NULL;
str0= returnstring();
printf("%s\n", str0 );
//切记要将malloc的内存释放掉,否则会造成内存泄露
free(str0);
return 1;
}
char* returnstring()
{
char* str = NULL;
str = (char*)malloc(10 * sizeof(char));
strcpy(str, "混世魔王小册子");
return str ;
}
方法三:返回函数内定义的静态变量(共享)
以这种方式调用,则要注意分配足够大小内存给str。
1、可以这样:
1 2 3 4 5 6 7 8 9 |
|
2、或者使用局部静态变量
1 2 3 4 5 6 |
|
3、这种方式要注意,由于是共享内存地址,对其修改会影响到每个调用者的,返回值加一个const防止被修改。
1 2 3 4 5 6 |
|
方法四: 还有一种是使用全局变量
char g_str[100] = { 0 };
char* fun()
{
strcpy(g_str, "abc ");
return g_str;
}
使用全局变量也要注意分配足够大的内存空间。