尝试返回字符串数组并打印内容,但收到错误

时间:2020-06-19 04:36:49

标签: c++

我正在尝试在函数中返回字符串数组并打印其变量。我知道没有办法在c ++中实际返回数组,但是可以传递其指针。因此,我设置了函数以返回指针值,然后从那里打印出来,但是指针不起作用。我收到一个例外,它无法访问阅读位置。

Exception thrown at 0x7AD2F3BE (ucrtbased.dll) in BankApp__.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.

我正在使用Visual Studio,因此在使用调试器时,我看到它无法读取该指针处的内容。

string * User::getPersonal() {
    string arr[] = { FirstName, LastName, Address, Birthday };
    return arr;
}

int main() 
    User testUser1, testUser2;
    testUser1.createLogin("wman", "password", "Wil", "Man", "333 3 Street", "09-03-1997");
    testUser2.createLogin("johndoe", "password", "John", "Doe", "123 ABC St.", "12-01-1990");
    User users[] = { testUser1, testUser2 };

    for (int i = 0; i < sizeof(users) / sizeof(users[0]); i++) {
        string * infoArray = users[i].getPersonal();
        //cout << *infoArray << endl;
        //cout << infoArray << endl;
        for (int i = 0; i < 4; i++) {
            string fields[] = { "First Name", "Last Name", "Address", "Birthday"};
            cout << fields[i] << ": " << *(infoArray + i) << endl;
        }
        cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;

    }
}

getPersonal()返回包含User所有数据的字符串数组指针。然后我想遍历元素并打印出来。有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您正在尝试返回一个指向本地(堆栈分配的)数组的指针,该数组在函数返回并且返回的指针始终悬空时会被破坏。

您可以改用std::vectorstd::array。例如

std::vector<string> User::getPersonal() {
    std::vector<string> arr = { FirstName, LastName, Address, Birthday };
    return arr;
}