C++ 为什么可以';我是否从string函数返回字符串数组?

C++ 为什么可以';我是否从string函数返回字符串数组?,c++,arrays,string,return-value,C++,Arrays,String,Return Value,我想使用我的函数创建一个字符串数组,但我的字符串函数的返回不起作用 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]) {

我想使用我的函数创建一个字符串数组,但我的字符串函数的返回不起作用

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;
}
字符串输入(){
整月[12]={31,28,31,30,31,30,31,30,31,31};
字符串数组[12];
对于(int i=0;i<12;i++)
{
int j=0;
而(j
首先声明函数返回单个
std::string
对象。其次,返回
array[12]
,它是十二元素数组的第十三个元素

实际上,您不能从函数返回普通数组。数组衰减为指向其第一个元素的指针,当函数返回时数组的生命周期结束时,该指针将立即失效


有两种解决方案:将数组(作为指向第一个元素的指针)作为参数传递给函数。或者返回例如一个对象。

您的问题是,您的操作语法错误,其中一些是不可能的。不幸的是,这两种情况都不会导致编译时错误,它只会执行其他操作,包括未定义的行为

您需要像这样声明函数:

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

return array;
按如下方式获取并打印数据:

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

std::cout
数组[12]
位于数组的末尾,即使它在边界内,也将是一个字符串,而不是字符串的集合

C样式的数组是不可分配的。
std::vector
std::array
是可分配的替代方案

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;
}

谢谢大家的帮助。我明白了,现在干净了。谢谢你们的回答。我明白了。现在干净了。