[英]Returning an array of strings (char*) in C
因此,想象一下這個相當簡單的場景。 我有一些函數,可以進行一些操作,最終返回一個char指針數組。 為了簡單起見,讓該函數不帶任何參數:
#include <stdio.h>
char **func(void);
int main() {
printf("%s\n", func()[0]);
return 0;
}
char **func() {
static char arr[3][10] = {"hi", "bye", "cry"};
return arr;
}
我希望能夠在main()
函數中訪問此數組。 我將數組設為靜態,以避免將地址返回到func()
范圍內定義的局部變量。 這段代碼可以編譯,但帶有警告:
警告:從不兼容的指針類型[-Wincompatible-pointer-types]返回
返回arr;
^
但是我該怎么做return參數呢? 指向char數組的指針? 我認為在C中返回數組是不好的做法。
運行此程序會導致無用的分段錯誤。
那我在做什么錯呢? 我不能返回一個指向char指針數組的指針嗎? 因此,一個char **
? 我是否在混合數組/指針衰減? 我將如何返回字符串數組? 有沒有一種方法可以不使用static
關鍵字而返回字符串數組?
編輯:當然,你們所有人都能同情我的困惑嗎? 並不是說C的數組指針衰減功能微不足道。
在語句中return arr;
, arr
將衰減到指向10個字符數組的指針,即類型char (*)[10]
而函數的返回類型為char **
。 兩種指針類型都不兼容。
您可以將聲明中的arr
類型從數組數組更改為指針數組。
static char *arr[3] = {"hi", "bye", "cry"};
或者您可以將函數的返回類型更改為char (*)[10]
char (*func())[10] {...}
數組:
static char arr[3][10] = {"hi", "bye", "cry"};
是一個由10個字符組成的數組。 這與char **不兼容。
嘗試
static char *arr[] = {"hi", "bye", "cry"};
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.