簡體   English   中英

在C中返回字符串數組(char *)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM