以下是我的代碼
在這里,我試圖呼叫一個函式,該函式回傳一個指標,該指標指向一個包含字符的陣列的值,
。但是有些地方出錯了,當我運行這段代碼時,它的輸出結果是:
97
uj5u.com熱心網友回復:
被回傳的值是一個指向區域變數的指標,特別是&l[0]。 在函式回傳后,這個變數的生命周期就結束了。 因此,當你試圖解除對回傳的指標的參考時,你正試圖在一個物件的生命周期結束后訪問它。 這將觸發未定義的行為。
你的函式需要為將要回傳的字串陣列動態地分配記憶體。
const char **func()
{
const char **l = malloc(2 * sizeof *l)。
l[0] = "a140"/span>;
l[1] = "3.14"。
return l;
}
還要注意的是,輸出將保持不變,因為你所列印的是第一個字串的第一個字符的ASCII值。 如果你想列印整個字串,不要解除對pointers[0]的參考,并使用%s格式指定器:
printf("%s", pointers[0] )。)
uj5u.com熱心網友回復:
你也可以
。
char ** func(void)
{
static char *list[] = {"a140"/span>,"3.14"/span>}。
return list。
}
或者
/* LOL everything is list */
typedef struct
{[/span>
char *list[2] 。
}list;
list func(void)。
{
list list = {{"a140"/span>,"3.14"/span>}。
return list。
}
int main(void)
{
char **list = (func() ).list;
printf("%s%s
", list[0], list[1])。)
}
https://godbolt.org/z/hhjK8G7TP
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/315481.html
標籤:
上一篇:何時使用&或不使用?
下一篇:使用遞回列印一個字串的反義詞
