C語言中函式返回字串的四種方法

2021-08-20 01:34:05 字數 1448 閱讀 7665

在討論著四種方法之前,首先要對函式有乙個簡單的認識,無論是在形實結合時,還是在return語句返回時,都有乙個拷貝的過程。你傳進來的引數是個值,自然函式在工作之前要把這個值拷貝乙份供自己使用,你傳進來的是個位址,函式也就會拷貝該位址供自己使用。同樣return返回時,如果返回乙個值,函式會將該值拷貝乙份以提供給主調函式使用,返回的是乙個指標(也就是位址),自然拷貝的就是乙個位址,供主調函式使用。

先給出乙個錯誤的例子:

#include #include 

char *retstring();

intmain()

char *retstring()

編譯一下**,會發現提示乙個警告,大概意思就是說返回了乙個區域性變數的位址。這個程式的輸出結果是不確定的,因為我們都知道,區域性變數的生存期是就在塊內部,這裡也就是在函式retstring()的內部,在main函式中,name的記憶體空間已經被**。

所以不能返回乙個自動變數的字串。。。

下面給出四種返回字串的方法:

1、 將字串指標作為函式引數傳入,並返回該指標。

2、 使用malloc函式動態分配記憶體,注意在主調函式中釋放。

3、 返回乙個靜態區域性變數。

4、 使用全域性變數。

下面是詳細解釋:

方法一:將字串指標作為函式引數傳入,並返回該指標。

典型的strcpy()函式應該就是採用的這種方法,第乙個引數為指向目的字串的指標,返回值也為這個指標。

char* strcpy(char* des,const

char*source)

方法二:使用malloc函式動態分配,但是一定要注意在主調函式中將其釋放,應為malloc動態分配的記憶體位於堆區,而堆區的記憶體是要程式設計師自己釋放的。

乙個例子如下:

#include #include 

#include

char *retstring();

intmain()

char *retstring()

方法三:返回乙個靜態區域性變數。

乙個例子如下:

#include #include 

#include

char *retstring();

intmain()

char *retstring()

這種方法有乙個問題: 由於採用了靜態區域性變數(位於靜態區,程式結束時由系統進行釋放),這就導致,如果多次呼叫這個函式,下一次呼叫會將上一次呼叫的結果覆蓋掉。

c語言中的庫函式,tmpnam()函式、getenv()函式等應該都是採用的這種方法,這也就是為什麼,使用這樣的函式的時候應該立即將返回結果拷貝乙份的原因。

方法四: 使用全域性變數。

乙個例子如下:

char   g_s[100

]; char*fun()

C語言中返回字串函式的四種實現方法

分類 unix linux c c 2010 12 29 02 54 11954人閱讀收藏 舉報 語言func儲存 有四種方式 1。使用堆空間,返回申請的堆位址,注意釋放 2。函式引數傳遞指標,返回該指標 3。返回函式內定義的靜態變數 共享 4。返回全域性變數 以下摘自csdn 其實就是要返回乙個有...

C語言中返回字串函式的四種實現方法

有四種方式 1。使用堆空間,返回申請的堆位址,注意釋放 2。函式引數傳遞指標,返回該指標 3。返回函式內定義的靜態變數 共享 4。返回全域性變數 其實就是要返回乙個有效的指標,尾部變數退出後就無效了。使用分配的記憶體,位址是有效 char fun 但這種方式需要注意,必須由使用將將返回的位址free...

C語言中函式返回字串的四種方法

在討論著四種方法之前,首先要對函式有乙個簡單的認識,無論是在形實結合時,還是在return語句返回時,都有乙個拷貝的過程。你傳進來的引數是個值,自然函式在工作之前要把這個值拷貝乙份供自己使用,你傳進來的是個位址,函式也就會拷貝該位址供自己使用。同樣return返回時,如果返回乙個值,函式會將該值拷貝...