1. 程式人生 > >C++返回字串函式的幾種實現方法

C++返回字串函式的幾種實現方法

C++返回字串函式有四種方式:
1。使用堆空間,返回申請的堆地址,注意釋放 2。函式引數傳遞指標,返回該指標 3。返回函式內定義的靜態變數(共享) 4。返回全域性變數

1.使用堆空間,返回申請的堆地址,注意釋放

其實就是要返回一個有效的指標,尾部變數退出後就無效了。 
使用分配的記憶體,地址是有效 
char   *fun() 
{ 
        char*   s = (char*)calloc(100,   sizeof(char*)   ); 
        if   (s) 
                strcpy( s,"abc"); 
        return   s; 
} 
但這種方式需要注意,必須由使用將將返回的地址free掉 

2.函式引數傳遞指標,返回該指標

將地址由入參傳入 
char*   fun(char*s) 
{ 
        if (s) 
              strcpy(s,"abc"); 
        return   s; 
} 
這種方式呼叫都要注意給s分配的大小是足夠。 
可以這樣: 
char*   fun(char*s,   int   len) 
{ 
        if   (s) 
        { 
              strncpy(s,   "abc ",   len-1); 
              s[len-1]   =   0; 
        } 
        return   s; 
} 

3.使用區域性靜態變數 

char*   fun() 
{ 
        static   char   s[100]; 
        strcpy(s,   "abc "); 
        return   s; 
} 
這種方式需要注意,不要修改返回的這個字串,由於是共享地址,對它的修改會反應到每個呼叫者的。可以這樣: 
const   char*   fun() 
{ 
        static   char   s[100]; 
        strcpy(s,   "abc "); 
        return   s; 
} 

4.使用全域性變數 

char   g_s[100]; 
char*   fun() 
{ 
        strcpy(g_s,   "abc "); 
        return   s; 
} 
同樣的,也要注意這個變數可儲存的最大空間。