char*很好用,不過呢它是乙個指標,指標就有指標都有的問題,例如野指標,又或者是空指標。
在char*作為函式返回值時,可能會造成某些不可預知的後果,比如你的返回值時而有時而沒有之類的。
舉個栗子
//這是乙個函式,目的是返回乙個char*陣列作為檔案的路徑
char* returnfilepath(char* fatherfilepath,char*sonfilepath)
看上去很合理嘛,就是把傳進來的兩個char*拼接成乙個新的再返回嘛
不過這樣寫會有問題:
1.temppath 是乙個臨時變數,它的生命週期在函式結束時就已經gg思密達了,但是呢,它返回的那個指標理論上當前還是指向正確的結果的(那塊記憶體/整個程式的記憶體沒被動過的前提下),如果這時候需要對記憶體進行操作,操作之後想要的結果就不知道**去了,靜靜地躺在記憶體區。
2.每次都劃分空間,無法釋放,直接釋放返回值其實是無效的,釋放乙個已經生命週期結束的指標沒啥意思。記憶體會洩漏,雖然這個檔案路徑看上去每次都不算大,不過記憶體洩漏可算是大事故哦。。
推薦玩法
//這是乙個函式,目的是得到檔案的路徑
void returnfilepath(char* fatherfilepath,char*sonfilepath, char & result)
具體語法可能會有點問題,但大致意思就是預先定義好承載你的檔案路徑的陣列位址,實參位址修改實參,這樣就爽了呀
傳入乙個char[max_filepath]多香。
人生苦短,還是選python好呀,最起碼時間不會浪費在和字串/寬窄位元組/中文不支援等等奇怪又無聊的問題較勁上。
這東西就好像你想和妹子為愛鼓掌,然後褲帶解不開,整半天興致都沒了。。。。。
2018 04 22 返回值為函式
今天在看函式返回值為函式的。想了半天加網上查終於理解了一點,就是它將那個返回的函式只作為乙個普通變數,再呼叫那個被返回的函式之前,這個返回函式都和普通返回值差不多 def sum late args def calc sum ax 0 for n in args ax ax n return ax ...
C語言函式返回值為指標和函式返回值為void
有時遇到函式返回值為空和函式返回值為指標的情況下,需要在前面定義該函式 函式的返回值為指標也必須在此定義,函式的返回值為void必須在此定義,返回值是整形或者其他基本型別不需要在此定義 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const cha...
14 函式返回值為引用?
函式返回值可以是引用嗎?當然可以,只是在函式返回引用的時候需要注意幾點。以下給出討論!函式在返回值的時候,會產生乙個臨時變數作為函式返回值的副本 而函式在返回引用的時候,不會產生副本!那麼既然是引用,那麼到底是引用誰呢?首先,我們知道要清楚函式返回引用的幾種常見形式 1 引用函式的引數,當然該引數 ...