c語言中返回值爲char*的情況分析

//這樣會報錯,因爲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)上述分析,實質爲函數返回值爲指針的情況,詳細見該文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章