c語言返回值是字元串
① c語言怎麼返回字元串數組
C語言返回值不支持返回數組,不過可以通過返回指針類型,用以替代數組。在C語言中,數組大多數時候是可以用指針替代的。
不過需要注意的是,不能夠返回在函數內部定義的局部變數數組,因為一旦函數退出,局部變數就會被釋放,導致數組指針無效。
可以返回以下幾種:
1 全局變數,或者全局變數空間內的一個地址。
2 靜態局部變數,或者靜態局部變數內部的一個地址。
3 從參數傳入的數組/指針變數,或者在其上做的合法偏移。
4 在數組內部動態申請的空間首地址。
② C語言系列之C語言如何返回字元串數組
C語言實現返回一個字元串數組,是沒有這種功能的,但是可以用指向數組的指針來實現:
解釋:
char **p 這個p就是指向數組的指針,它指向一個數組的起始地址.
想要引用裡面的數組時,直接使用p[i] 即可。
我們知道C語言裡面的各種數組,本質上都是指針,並且函數其實也是不能把數組當作參數的,實際上都是把數組的地址傳進去了,實際上就是指向數組地址的指針。
實現
這樣返回的P就是指向數組的指針了,實際上就是一個字元串數組
函數解釋:
函數返回一個字元串數組,實際上就是指向數組的指針,傳進去的是返回的數組的大小以及一個字元串數組,用來處理數據用。
③ 在C語言中,返回一個字元串的函數應該怎樣定義
要返回字元串 需要返回char*類型
需要注意的是 返回的字元串 不能是該函數的局部變數,否則會導致出錯
可以是參數字元串,全局變數,靜態局部變數,或者動態分配的內存
比如
char*my_str_cpy(char*d,char*s)
{
char*p=d;
while(*p++=*s++);
returnd;//返回參數字元串。
}
④ C語言怎麼設定函數返回值為char*字元串類型
給你寫了個例子,fun函數用於為字元串開辟空間,然後返回字元串的指針
#include
#include
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]...
⑤ C語言怎麼設定函數返回值為char*字元串類型
把函數的返回值的類型設置為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
⑥ c語言中return可以是一個字元串嗎
當然可以
char* fun()
{
char* myname = "hello world";
return myname;
},函數的返回值類型可以有很多種!(int,float,bool,char*,char...)
⑦ C語言中以字元串為返回值的函數的問題,困擾我好幾天了
野指針的含義:超出生命周期的指針,包括函數內局部數據的指針(static修飾數據除外,它不在棧上)和已經被釋放了的動態分配內存區。
char *Getstr(void)
{
char s[80];
scanf("%s",s);
printf("s = %p\n",s);
return s;
}
這個函數,是將棧內局部變數的地址返回給調用者,調用者拿到的指針屬於典型的超出生命周期的指針,對它的使用會不會引起錯誤,依賴於進一步的操作,本身行為就是不可預期的。
可以認為:使用strcpy和printf並沒有破壞這個內存區域,即沒有對這部分內存做修改,因此運行可以得到你期待的結果。但puts的運行修改了這部分內存區,導致你看到的都是亂碼。
避免野指針帶來的不確定性:
你可以使用
char *Getstr(void)
{
static char s[80];
scanf("%s",s);
printf("s = %p\n",s);
return s;
}
用這個函數,你的所有邏輯都不變。
或者
char *Getstr(void)
{
char *s = malloc(80);
scanf("%s",s);
printf("s = %p\n",s);
return s;
}
要記得在這個調用後得到的ptr,一定要用free(ptr)。
⑧ C語言如何返回字元串
new 是動態分配(在堆上分配),你向系統要了 50 B 的內存,如
char* str=new char[50]; // 50 * 1B
堆上分配就是這情況,你不釋放(delete一下),它就認為你在用著;不會再給別人用
如果給你的你不用了,或是你把它給忘記了,那就算是內存泄露了、
當然,你程序退出的時候,系統會替你回收、不過這樣的習慣不好,你想,如果你寫了死循環(操作系統、伺服器程序等)、那裡面不斷滴在內存泄露,你就危險了、後來發現,不知不覺,內存怎麼就不夠用了,明明自己用的不多啊、、
修改一下:
char* fanhui()
{
static char str[100]; // 局部變數,靜態局部變數,它在第一次調用的時候分配,
cin >> str; // 函數返回了,str的空間還是存在的,也就是不會重復申請、
return str; // 而且,函數外面通過,指針也是可以訪問他們的、、
}
而
char* fanhui()
{
char str[100]; // 局部變數,默認動態局部變數,它在每一次調用的時候分配,
cin >> str; // 函數返回了,str的空間也就不存在了,他是在,棧,上分配的、
return str; // 函數外面通過,指針想訪問?、非法!!!人都不在了,你喊他幹嘛啊??
}
⑨ C語言中函數如何返回字元串
別聽 樓上 的 瞎說, 也 別 網路 了, 都是 錯 的, 我 告訴 你 正確 答案
函數 中 的 字元 串 在 函數 結束 的 時候 會 自動 被 釋放 掉, 所以 即使 返回 char* 指向 的
也 就是 原 函數 字元串 的 地址, 訪問 的 是 一個 系統 沒有 分配 給 程序 的 內存, 雖然 編譯器 不會 報錯, 但 語法 絕對 是 錯誤 的,而且 你 不一定 能 得到 一個 正確 的 結果
三種 解決 方法:
1, struct ret { char a[100]; }; 返回 一個 結構, 結構裡面 包含 字元串
2, char* ret = (char *)malloc(100 * sizeof (char)); 在 函數 里 開 一個 動態 的 字元串, 這個 可以 返回, 不過 動態 內存 需要 手動 free 掉
3, 這個 不是 c語言 了, 調用 c++ 裡面 的 string 類型, 也是 最簡單 的 辦法, 省心, 安全
⑩ c語言中函數返回值可以是數組、字元串和結構體嗎
1、ANSIC語言標准,明確規定數組類型和函數類型不可以做為返回值。
解決這種返回值的方法是通過指針來間接返回,即使用數組指針和函數指針。這可以做為c語言引入指針的另一個理由。
2、字元串是數組的一種,是字元數組,所以同樣不可以作為返回值。
3、結構體類型可以做為返回值,C語言設計者當時引入struct結構體的概念,目的是為了增加一種建立C語言新類型的機制,換句話說它希望通過struct建立的類型,像內置的int float類型一樣使用方便。