別聽 樓上 的 瞎說, 也 別 百度 了, 都是 錯 的, 我 告訴 你 正確 答案
網站建設哪家好,找創新互聯公司!專注于網頁設計、網站建設、微信開發、微信小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了鹿邑免費建站歡迎大家使用!
函數 中 的 字符 串 在 函數 結束 的 時候 會 自動 被 釋放 掉, 所以 即使 返回 char* 指向 的
也 就是 原 函數 字符串 的 地址, 訪問 的 是 一個 系統 沒有 分配 給 程序 的 內存, 雖然 編譯器 不會 報錯, 但 語法 絕對 是 錯誤 的,而且 你 不一定 能 得到 一個 正確 的 結果
三種 解決 方法:
1, struct ret { char a[100]; }; 返回 一個 結構, 結構里面 包含 字符串
2, char* ret = (char *)malloc(100 * sizeof (char)); 在 函數 里 開 一個 動態 的 字符串, 這個 可以 返回, 不過 動態 內存 需要 手動 free 掉
3, 這個 不是 c語言 了, 調用 c++ 里面 的 string 類型, 也是 最簡單 的 辦法, 省心, 安全
給你寫了個例子,fun函數用于為字符串開辟空間,然后返回字符串的指針
#include stdio.h
#include stdlib.h
char * fun(int n)
{
return (char *)malloc(n);
}
void main()
{
char *ray;
int i;
ray = fun(5);
for (i = 0; i 4; ++i)
{
ray[i] = 65+i;
}
ray[4] = '\0';
printf("%s", ray);
}
把函數的返回值的類型設置為char類型的指針就可以了。
例如:char* MultMatrix( )
實例:
#include iostream
using namespace std;
char* MultMatrix( )
{
char*M = new char[4];
M[0]='a';
M[1]='b';
M[1]='c';
M[3]='d';
M[3]='\0';//給字符串寫結尾
cout M[0] " " M[1] endl;//輸出返回前的數組
cout M[2] " " M[3] endl;
return M;
}
int main()
{
char *M = MultMatrix();
cout M[0] " " M[1] endl;//輸出返回后數組
cout M[2] " " M[3] endl;
delete[] M;
return 0;
}
運行結果:
a b
c d
a b
c d
在time1()函數里,char now[]是個在函數里聲明的臨時變量
函數返回 char * p之后 ,char now[]的空間就已經釋放掉了
如果你想返回時間字符串
把char now[80]; 改成 char *now =(char *)malloc(sizeof(char)*80);
用malloc函數申請空間,函數返回之后空間就不會被釋放掉了
VC++ 6.0編譯通過
C語言返回字符串有四種方式:1。使用堆空間,返回申請的堆地址,注意釋放2。函數參數傳遞指針,返回該指針3。返回函數內定義的靜態變量(共享)4。返回全局變量使用分配的內存,地址是有效
char *fun()
{
char* s = (char*)calloc(100, sizeof(char*) );
if (s)
strcpy ( s , "abc " );
return s;
}
但這種方式需要注意,必須由使用將將返回的地址free掉
將地址由入參傳入
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;
}
或才使用局部靜態變量
char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
這種方式需要注意,不要修改返回的這個字符串,由于是共享地址,對它的修改會反應到每個調用者的。可以這樣:
const char* fun()
{
static char s[100];
strcpy(s, "abc ");
return s;
}
還有一種是使用全局變量
char g_s[100];
char* fun()
{
strcpy(g_s, "abc ");
return s;
}
同樣的,也要注意這個變量可存儲的最大空間。
要返回字符串 需要返回char*類型
需要注意的是 返回的字符串 不能是該函數的局部變量,否則會導致出錯
可以是參數字符串,全局變量,靜態局部變量,或者動態分配的內存
比如
char?*my_str_cpy(char?*d,?char?*s)
{
char?*p=d;
while(*p++=*s++);
return?d;//返回參數字符串。?
}
分享名稱:c語言里返回字符類型函數 c語言返回字符串的函數
文章URL:http://m.kartarina.com/article44/hgsoee.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、企業建站、移動網站建設、、面包屑導航、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯