簡體   English   中英

為什么我不能從字符串函數返回字符串數組?

[英]Why can't I return the string array from the string function?

我想用我的函數來創建一個字符串數組,但我的字符串函數的返回不起作用。

string input() {
    int months[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    string array[12];

    for (int i = 0; i < 12; i++)
    {
        int j = 0;
        while (j < months[i])
        {
            array[i] = array[i] + "-";
            j++;
        }
            }
    return array[12];
}



int main() {

    string array[12];
    array[12] = input();
    return 0;
}

首先,您的函數被聲明為返回單個std::string對象。 其次,您返回array[12] ,它是十二元素數組的第十三元素。

而且您實際上無法從函數中返回普通數組。 數組衰減到指向它們的第一個元素的指針,當函數返回時,隨着數組的生命周期結束,該指針將立即失效。

有幾種解決方案:要么將數組(作為指向第一個元素的指針)作為參數傳遞給函數。 或者返回例如一個std::array對象。

array[12]不在數組的末尾,即使它在邊界內,它也將是一個字符串,而不是字符串的集合。

C 樣式數組不可分配。 std::vector<std::string>std::array<std::string, 12>是可分配的替代方案。

using MonthMarks = std::array<std::string, 12>;

MonthMarks input() {
    std::array<int, 12> months = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    MonthMarks result;

    for (int i = 0; i < 12; i++)
    {
        int j = 0;
        while (j < months[i])
        {
            result[i] = result[i] + "-";
            j++;
        }
    }
    return result;
}

int main() {
    MonthMarks = input();
    return 0;
}

請注意, std::string有一個接受大小和填充字符的構造函數,因此您的輸入可以簡化為

for (int i = 0; i < 12; i++)
{
    result[i] = std::string(months[i], '-');
}

你的問題是你正在做的事情有錯誤的語法,有些是不可能的。 不幸的是,這兩者都不會導致編譯時錯誤,它只會執行其他操作,包括未定義的行為。

您需要像這樣聲明函數:

std::array<std::string, 12> input() {

你不能返回一個數組,但如果你把它包裝成一個std::array ,你可以。

然后在里面做這個:

std::array<std::string, 12> array;

並將其返回為

return array;

像這樣獲取並打印數據:

int main() {
    std::array<std::string, 12> array = input();
    for (std::string s : array) {
        std::cout << s << std::endl;
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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