有四種方式:
1。使用堆空間,返回申請的堆地址,注意釋放
2。函式引數傳遞指標,返回該指標
3。返回函式內定義的靜態變數(共享)
4。返回全域性變數
******************以下摘自csdn******************************
其實就是要返回一個有效的指標,尾部變數退出後就無效了。
使用分配的記憶體,地址是有效
1 2 3 4 5 6 7 |
char *fun() { char* s = (char*)calloc(100, sizeof(char*) ); if (s) strcpy ( s , "abc " ); return s; } |
但這種方式需要注意,必須由使用將將返回的地址free掉
將地址由入參傳入
1 2 3 4 5 6 |
char* fun(char*s) { if (s) strcpy(s, "abc "); return s; } |
這種方式呼叫都要注意給s分配的大小是足夠。
可以這樣:
1 2 3 4 5 6 7 8 9 |
char* fun(char*s, int len) { if (s) { strncpy(s, "abc ", len-1); s[len-1] = 0; } return s; } |
或才使用區域性靜態變數
1 2 3 4 5 6 |
char* fun() { static char s[100]; strcpy(s, "abc "); return s; } |
這種方式需要注意,不要修改返回的這個字串,由於是共享地址,對它的修改會反應到每個呼叫者的。可以這樣:
1 2 3 4 5 6 |
const char* fun() { static char s[100]; strcpy(s, "abc "); return s; } |
還有一種是使用全域性變數
1 2 3 4 5 6 |
char g_s[100]; char* fun() { strcpy(g_s, "abc "); return s; } |
同樣的,也要注意這個變數可儲存的最大空間。