C语言返回字符串的四种方式

方法一:将字符串指针作为函数参数传入,并返回该指针。

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

char* fun(char* str, int len)

{

  if (str)

  {

    strncpy(str, "abc", len-1); //"abc"存放在常量区,故不会被释放掉

    str[len-1] = 0;

  }

  return str;

}

2、或者使用局部静态变量 

1

2

3

4

5

6

char* fun()

{

  static char str[100] = { 0};

  strcpy(str, "abc ");

  return str;

}

3、这种方式要注意,由于是共享内存地址,对其修改会影响到每个调用者的,返回值加一个const防止被修改。 

1

2

3

4

5

6

const char* fun()

{

  static char str[100];

  strcpy(str, "abc ");

  return str;

}

方法四: 还有一种是使用全局变量 

char  g_str[100] = { 0 }; 

char*   fun() 

        strcpy(g_str,   "abc "); 

        return   g_str; 

使用全局变量也要注意分配足够大的内存空间。

猜你喜欢

转载自blog.csdn.net/qq_30460949/article/details/89051697