//這樣會報錯,因爲str數組元素爲局部變量,存儲在棧內,函數結束後,內容失效
char* func(char* name)
{
char str[5];
strcpy(str,name);
return str;
}
錯誤分析:
str爲地址,返回值爲char*,是進行了值傳遞,沒有問題,但是,數組中的元素爲局部變量,存儲在棧中,函數外無效。
1、解決方法1:將數組定義爲static
char* func(char *name)
{
static char str[5];
strcpy(str,name);
return str;
}
2、解決方法2:字符串爲靜態常量//存儲在常量區
char* func()
{
char *str= “hello”;
//char str[]= "hello";
return str;
}
3、解決方法3:設置爲動態數組
char* func(char* name)
{
char *str= (char*)malloc(5*sizeof(char));
strcpy(str,name);
return str;
}
4、解決方法4:設置爲全局變量
char *str;
char* func(char* name)
{
strcpy(str,name);
return str;
}
小結:通過以上方法,返回字符串,只要返回字符串首地址即可。
1)調用函數時,若直接輸出的話,用一個字符指針接收即可:char *result = func(); cout <<result;
從從傳出的首地址開始打印字符串,直至‘\0’。
2)調用函數時,若要獲取返回的的字符串:
char result[5];
strcpy(result,func());
總結:1)字符串的賦值,需要使用strcpy()函數。
2)上述分析,實質爲函數返回值爲指針的情況,詳細見該文。